optparse-generic 1.4.4 → 1.4.5
raw patch · 3 files changed
+38/−5 lines, 3 files
Files
- CHANGELOG.md +5/−0
- optparse-generic.cabal +4/−4
- src/Options/Generic.hs +29/−1
CHANGELOG.md view
@@ -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
optparse-generic.cabal view
@@ -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:
src/Options/Generic.hs view
@@ -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