optparse-generic 1.0.0 → 1.0.1
raw patch · 2 files changed
+44/−7 lines, 2 filesdep +timePVP ok
version bump matches the API change (PVP)
Dependencies added: time
API changes (from Hackage documentation)
+ Options.Generic: instance (Options.Generic.GenericParseRecord (f GHC.Generics.:+: g), Options.Generic.GenericParseRecord (h GHC.Generics.:+: i)) => Options.Generic.GenericParseRecord ((f GHC.Generics.:+: g) GHC.Generics.:+: (h GHC.Generics.:+: i))
+ Options.Generic: instance Options.Generic.ParseField Data.Time.Calendar.Days.Day
+ Options.Generic: instance Options.Generic.ParseFields Data.Time.Calendar.Days.Day
+ Options.Generic: instance Options.Generic.ParseRecord Data.Time.Calendar.Days.Day
Files
- optparse-generic.cabal +2/−1
- src/Options/Generic.hs +42/−6
optparse-generic.cabal view
@@ -1,5 +1,5 @@ Name: optparse-generic-Version: 1.0.0+Version: 1.0.1 Cabal-Version: >=1.8.0.2 Build-Type: Simple License: BSD3@@ -27,6 +27,7 @@ text < 1.3 , transformers >= 0.2.0.0 && < 0.6 , optparse-applicative >= 0.11.0 && < 0.13,+ time >= 1.5 && < 1.7, void < 0.8 Exposed-Modules: Options.Generic GHC-Options: -Wall
src/Options/Generic.hs view
@@ -196,6 +196,8 @@ import qualified Data.Text import qualified Data.Text.Lazy+import qualified Data.Time.Calendar+import qualified Data.Time.Format import qualified Data.Typeable import qualified Filesystem.Path.CurrentOS as Filesystem import qualified Options.Applicative as Options@@ -300,6 +302,27 @@ instance ParseField FilePath where parseField = fmap (fmap Filesystem.decodeString) (parseString "FILEPATH") +instance ParseField Data.Time.Calendar.Day where+ parseField m = do+ let metavar = "YYYY-MM-DD"+ case m of+ Nothing -> do+ let fs = Options.metavar metavar+ Options.argument iso8601Day fs+ Just name -> do+ let fs = Options.metavar metavar+ <> Options.long (Data.Text.unpack name)+ Options.option iso8601Day fs+ where+ iso8601Day = Options.eitherReader+ $ runReadS . Data.Time.Format.readSTime+ False+ Data.Time.Format.defaultTimeLocale+ "%F"++ runReadS [(day, "")] = Right day+ runReadS _ = Left "expected YYYY-MM-DD"+ {-| A class for all types that can be parsed from zero or more arguments/options on the command line @@ -324,6 +347,7 @@ instance ParseFields Data.Text.Text instance ParseFields Data.Text.Lazy.Text instance ParseFields FilePath+instance ParseFields Data.Time.Calendar.Day instance ParseFields Bool where parseFields m =@@ -395,10 +419,14 @@ instance ParseFields a => ParseRecord (Only a) -instance ParseRecord Char-instance ParseRecord Double-instance ParseRecord Float-instance ParseRecord Int+instance ParseRecord Char where+ parseRecord = fmap getOnly parseRecord+instance ParseRecord Double where+ parseRecord = fmap getOnly parseRecord+instance ParseRecord Float where+ parseRecord = fmap getOnly parseRecord+instance ParseRecord Int where+ parseRecord = fmap getOnly parseRecord instance ParseRecord Ordering instance ParseRecord Void instance ParseRecord ()@@ -424,6 +452,9 @@ instance ParseRecord FilePath where parseRecord = fmap getOnly parseRecord +instance ParseRecord Data.Time.Calendar.Day where+ parseRecord = fmap getOnly parseRecord+ instance ParseField a => ParseRecord (Maybe a) where parseRecord = fmap getOnly parseRecord @@ -462,6 +493,11 @@ genericParseRecord = fmap M1 genericParseRecord -- See: [NOTE - Sums]+instance (GenericParseRecord (f :+: g), GenericParseRecord (h :+: i)) => GenericParseRecord ((f :+: g) :+: (h :+: i)) where+ genericParseRecord = do+ fmap L1 genericParseRecord <|> fmap R1 genericParseRecord++-- See: [NOTE - Sums] instance (Constructor c, GenericParseRecord f, GenericParseRecord (g :+: h)) => GenericParseRecord (M1 C c f :+: (g :+: h)) where genericParseRecord = do let m :: M1 i c f a@@ -477,7 +513,7 @@ let parser = Options.subparser subparserFields - fmap (L1 . M1) parser <|> genericParseRecord+ fmap (L1 . M1) parser <|> fmap R1 genericParseRecord -- See: [NOTE - Sums] instance (Constructor c, GenericParseRecord (f :+: g), GenericParseRecord h) => GenericParseRecord ((f :+: g) :+: M1 C c h) where@@ -495,7 +531,7 @@ let parser = Options.subparser subparserFields - genericParseRecord <|> fmap (R1 . M1) parser+ fmap L1 genericParseRecord <|> fmap (R1 . M1) parser -- See: [NOTE - Sums] instance (Constructor c1, Constructor c2, GenericParseRecord f1, GenericParseRecord f2) => GenericParseRecord (M1 C c1 f1 :+: M1 C c2 f2) where