diff --git a/optparse-generic.cabal b/optparse-generic.cabal
--- a/optparse-generic.cabal
+++ b/optparse-generic.cabal
@@ -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
diff --git a/src/Options/Generic.hs b/src/Options/Generic.hs
--- a/src/Options/Generic.hs
+++ b/src/Options/Generic.hs
@@ -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
