optparse-applicative-0.12.1.0: Utilities and combinators for parsing command line options

# optparse-applicative-0.12.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.

Modules

- Options
  - Options.Applicative
    - Options.Applicative.Arrows
    - Options.Applicative.BashCompletion
    - Options.Applicative.Builder
      - Options.Applicative.Builder.Completer
      - Options.Applicative.Builder.Internal
    - Options.Applicative.Common
    - Options.Applicative.Extra
    - Options.Applicative.Help
      - Options.Applicative.Help.Chunk
      - Options.Applicative.Help.Core
      - Options.Applicative.Help.Pretty
      - Options.Applicative.Help.Types
    - Options.Applicative.Internal
    - Options.Applicative.Types