stackage-cli-0.0.0: src/SimpleOptions.hs
{-# LANGUAGE RankNTypes #-}
-- | A convenience wrapper around Options.Applicative.
module SimpleOptions
( simpleOptions
, Options.addCommand
, Options.simpleVersion
) where
import Control.Applicative
import Control.Monad.Trans.Either (EitherT)
import Control.Monad.Trans.Writer (Writer)
import Data.Monoid
import qualified Options.Applicative.Simple as Options
-- | This is a drop-in replacement for simpleOptions from
-- Options.Applicative.Simple, with the added feature of a `--summary` flag
-- that prints out the header. (Should be one line)
simpleOptions
:: String
-- ^ version string
-> String
-- ^ header
-> String
-- ^ program description
-> Options.Parser a
-- ^ global settings
-> EitherT b (Writer (Options.Mod Options.CommandFields b)) ()
-- ^ commands (use 'addCommand')
-> IO (a,b)
simpleOptions versionString h pd globalParser mcommands =
Options.simpleOptions
versionString h pd globalParser' mcommands
where
globalParser' = summaryOption <*> globalParser
summaryOption = Options.infoOption h
$ Options.long "summary"
<> Options.help "Show program summary"