optparse-applicative-0.13.1.0: Utilities and combinators for parsing command line options
Here is a simple example of an applicative option parser:
data Sample = Sample
{ hello :: String
, quiet :: Bool }
sample :: Parser Sample
sample = Sample
<$> strOption
( long "hello"
<> metavar "TARGET"
<> help "Target for the greeting" )
<*> switch
( long "quiet"
<> help "Whether to be quiet" )
The parser is built using applicative style starting from a set of basic
combinators. In this example, hello is defined as an option with a
String argument, while quiet is a boolean flag (called switch).
A parser can be used like this:
greet :: Sample -> IO ()
greet (Sample h False) = putStrLn $ "Hello, " ++ h
greet _ = return ()
main :: IO ()
main = execParser opts >>= greet
where
opts = info (helper <*> sample)
( fullDesc
<> progDesc "Print a greeting for TARGET"
<> header "hello - a test for optparse-applicative" )
The greet function is the entry point of the program, while opts is a
complete description of the program, used when generating a help text. The
helper combinator takes any parser, and adds a help option to it (which
always fails).
The hello option in this example is mandatory (since it doesn't have a
default value), so running the program without any argument will display a
help text:
hello - a test for optparse-applicative Usage: hello --hello TARGET [--quiet] Print a greeting for TARGET Available options: -h,--help Show this help text --hello TARGET Target for the greeting --quiet Whether to be quiet
containing a short usage summary, and a detailed list of options with descriptions.