ReadArgs-1.2.3: Simple command line argument parsing

# ReadArgs-1.2.3: Simple command line argument parsing

ReadArgs provides the `readArgs` IO action, which lets you tell the compiler to parse the command line arguments to fit the type signature you give.

For example `(a :: Int, b :: String, c :: Float) <- readArgs` would parse the first runtime argument as an `Int`, the second as a `String` (no quotes required) and the third as a `Float`.

If the runtime arguments are incompatible with the type signature, then a simple usage statement is given of the types needed.

Continuing the previous example, if it was used in a program named `Example`, the error message for the above action would be:

    usage: Example Int String Float

Any type that has both `Typeable` and `Read` instances can be used. `Char`, `String`, and `Text` are handled specially so that command line arguments for both do not require quotes (as their `Read` instances do). A special instance is provided for `FilePath` so that no constructor or quotes are required.

`readArgs` also supports optional arguments and variadic arguments. Optional arguments are specified using `Maybe`, and variadic arguments using a list. `(a :: Int, b :: Maybe String, c :: [Float]) <- readArgs` would successfully parse any of the following sets of command line arguments:

    Example 1
    Example 1 2 3 4
    Example 1 foo
    Example 1 foo 2 3 4

But not

    Example
    Example foo
    Example 1.0

Usage statements for optional and variadic arguments use command-line parlance:

    usage: Example Int [String] [Float..]

Note that both optional and variadic parsers are greedy by default (so `Example 1 2 3 4` was parsed as `(1, "2", [3.0,4.0])`. They may both be made non-greedy through use of the `NonGreedy` constructor:

    ( a :: Int
    , NonGreedy b :: NonGreedy Maybe String
    , NonGreedy c :: NonGreedy [] Float
    ) <- readArgs

Modules

ReadArgs-1.2.3

- ReadArgs