{-# 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"