diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,8 @@
+1.4.5
+
+* [Add ability to set the short name in the type](https://github.com/Gabriel439/Haskell-Optparse-Generic-Library/pull/84)
+* [Display default values in `--help` output](https://github.com/Gabriel439/Haskell-Optparse-Generic-Library/pull/83)
+
 1.4.4
 
 * `readIntegralBounded`: use `metavar` in error message
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.4.4
+Version: 1.4.5
 Cabal-Version: >=1.10
 Build-Type: Simple
 License: BSD3
@@ -27,12 +27,12 @@
         base                 >= 4.6      && < 5   ,
         system-filepath      >= 0.3.1    && < 0.5 ,
         text                                < 1.3 ,
-        transformers         >= 0.2.0.0  && < 0.6 ,
+        transformers         >= 0.2.0.0  && < 0.7 ,
         Only                                < 0.2 ,
         optparse-applicative >= 0.16.0.0 && < 0.17,
-        time                 >= 1.5      && < 1.10,
+        time                 >= 1.5      && < 1.13,
         void                                < 0.8 ,
-        bytestring                          < 0.11
+        bytestring                          < 0.12
     
     if impl(ghc < 8.0)
         Build-Depends:
diff --git a/src/Options/Generic.hs b/src/Options/Generic.hs
--- a/src/Options/Generic.hs
+++ b/src/Options/Generic.hs
@@ -310,6 +310,7 @@
     -- * Help
     , type (<?>)(..)
     , type (<!>)(..)
+    , type (<#>)(..)
     , type (:::)
     , Wrapped
     , Unwrapped
@@ -330,6 +331,7 @@
 import Control.Monad.IO.Class (MonadIO(..))
 import Data.Char (isUpper, toLower, toUpper)
 import Data.Int (Int8, Int16, Int32, Int64)
+import Data.Maybe (listToMaybe)
 import Data.Monoid
 import Data.List.NonEmpty (NonEmpty((:|)))
 import Data.Proxy
@@ -418,6 +420,7 @@
                        <> foldMap (Options.help . Data.Text.unpack) h
                        <> foldMap Options.short c
                        <> foldMap Options.value (d >>= Text.Read.readMaybe)
+                       <> foldMap (Options.showDefaultWith . const) d
                 Options.option   readField fs
 
     {-| The only reason for this method is to provide a special case for
@@ -518,7 +521,7 @@
                    <> Options.long (Data.Text.unpack name)
                    <> foldMap (Options.help . Data.Text.unpack) h
                    <> foldMap Options.short c
-                   <> foldMap Options.value d
+                   <> foldMap ((Options.showDefault <>) . Options.value) d
             Options.option Options.str fs
 
 instance ParseField Data.Text.Text where
@@ -683,6 +686,26 @@
     parseFields h m c _ = DefValue <$> parseFields h m c (Just (symbolVal (Proxy :: Proxy d)))
 instance (ParseFields a, KnownSymbol h) => ParseRecord (a <!> h)
 
+{-| Use this to annotate a field with a type-level char (i.e. a `Symbol`)
+    representing the short name of the field (only the first character of the
+    symbol is used):
+
+> data Example = Example
+>     { foo :: Int    <#> "f"
+>     , bar :: Double <#> "b"
+>     } deriving (Generic, Show)
+-}
+newtype (<#>) (field :: *) (value :: Symbol) = ShortName { unShortName :: field } deriving (Generic, Show)
+
+instance (ParseField a, KnownSymbol c) => ParseField (a <#> c) where
+    parseField h m _ d = ShortName <$> parseField h m (listToMaybe (symbolVal (Proxy :: Proxy c))) d
+    readField = ShortName <$> readField
+    metavar _ = metavar (Proxy :: Proxy a)
+
+instance (ParseFields a, KnownSymbol c) => ParseFields (a <#> c) where
+    parseFields h m _ d = ShortName <$> parseFields h m (listToMaybe (symbolVal (Proxy :: Proxy c))) d
+instance (ParseFields a, KnownSymbol h) => ParseRecord (a <#> h)
+
 {-| A 1-tuple, used solely to translate `ParseFields` instances into
     `ParseRecord` instances
 -}
@@ -1172,6 +1195,7 @@
 type family Unwrap ty where
   Unwrap (ty <?> helper) = Unwrap ty
   Unwrap (ty <!> defVal) = Unwrap ty
+  Unwrap (ty <#> shrtNm) = Unwrap ty
   Unwrap ty = ty
 
 infixr 0 :::
@@ -1211,6 +1235,10 @@
 instance GenericUnwrappable (K1 i field) (K1 i c)
   => GenericUnwrappable (K1 i (field <!> defVal)) (K1 i c) where
     genericUnwrap (K1 c) = (genericUnwrap :: K1 i field p -> K1 i c p) (K1 (unDefValue c))
+
+instance GenericUnwrappable (K1 i field) (K1 i c)
+  => GenericUnwrappable (K1 i (field <#> defVal)) (K1 i c) where
+    genericUnwrap (K1 c) = (genericUnwrap :: K1 i field p -> K1 i c p) (K1 (unShortName c))
 
 -- | Unwrap the fields of a constructor
 unwrap :: forall f . Unwrappable f => f Wrapped -> f Unwrapped
