@hackage hydrogen-cli-args0.17

Hydrogen Command Line Arguments Parser

hydrogen-cli-args

Build Status

An easy to use command line arguments parser.

main = do

    (options, switches, args) <- getOpts [
        'V' ~: switch "version"
      , 'h' ~: switch "help"
      ,        optarg "inFile"
      ,        optarg "outFile"
      , 'v' ~: switch "verbose"
      , 'f' ~: optarg "flag"
      , 'D' ~: optarg "config"
      ]

    when (switches ? "version") $ println "Example v1.0"

    when (switches ? "help") showManual

    let flags  = options ! "flag"
        config = options ! "config"

    ...

This program will accept arguments like that:

-h --version -DHELLLO --config=SOME_CONFIG -f flagvalue
  • options in the above example is a MultiMap String String
  • switches is a Set String
  • args contains the remaining arguments as a [String].

If an optional argument, defined by optarg is given (by its short alias or by its long name) it will show up in the options MultiMap. Note that you can check for a key beings set with (?) and retrieve all associated values with (!). Also note that (!) will always return a list, but possibly en empty one (if no option was given).

Long options can be given as --key value or as --key=value.

Short options can be given as -D value as well as -Dvalue.

If a switch, defined by switch is given, it will show up in the switches Set. You can query for whether a switch is set or not with (?).

Switches can be combined, i.e. -hv is the same as -h -v.

If -- is supplied as an argument, no options are evaluated beyond this point. Any unknown or malformed option (-x, --xxxx) will be treated as an argument.

API

Define options

switch :: String -> Option

Defines a command line switch with the given long name.

optarg :: String -> Option

Defines a command line option with the given long name.

alias ~: option :: Char -> Option -> Option

Defines a shorthand for the given option.

option ~? check :: Option -> (String -> Bool) -> Option

Defines a check which the optional arguments' value has to pass.

option ~= pattern :: Option -> String -> Option

Defines a pattern which the optional arguments' value must match.

Get options and arguments

type OptArgs = (MultiMap String String, Set String, [String])

getOpts :: [Options] -> IO OptArgs

getOpts' :: [Options] -> [String] -> OptArgs

Query MultiMaps / Sets

Part of hydrogen-prelude.