This module contains an arrow interface for option parsers, which
allows to define and combine parsers using the arrow notation and
arrow combinators.
The arrow syntax is particularly useful to create parsers of nested
structures, or records where the order of fields is different from the
order in which the parsers should be applied.
For example, an
arguments parser often needs to be applied
last, and that makes it inconvenient to use it for a field which is
not the last one in a record.
Using the arrow syntax and the functions in this module, one can
write, e.g.:
data Options = Options
{ optArgs :: [String]
, optVerbose :: Bool }
opts :: Parser Options
opts = runA $ proc () -> do
verbose <- asA (switch (short 'v')) -< ()
args <- asA (arguments str idm) -< ()
returnA -< Options args verbose
Parser arrows, created out of regular
Parser values using the
asA function, are arrows taking
() as argument and
returning the parsed value.