| License | BSD3 |
|---|---|
| Maintainer | tbidne@gmail.com |
| Safe Haskell | None |
| Language | Haskell2010 |
Common.Parsing.Core
Description
Provides functions for parsing String arguments.
Synopsis
- data AnyParser acc = forall a. AnyParser (Parser a acc)
- data Parser a acc
- = ExactParser (String -> Maybe a, acc -> a -> acc)
- | PrefixParser (String, String -> Maybe a, acc -> a -> acc)
- parseAll :: Monoid acc => [AnyParser acc] -> [String] -> ParseAnd acc
- module Common.Parsing.ParseAnd
- module Common.Parsing.ParseOr
Documentation
Wraps functions that:
- Attempts to parse a String into an
a. - Updates
accwitha.
That is,
parseFn ::String->Maybea updateFn :: acc -> a -> acc
Constructors
| ExactParser (String -> Maybe a, acc -> a -> acc) | Parses an exact argument e.g. "-flag". |
| PrefixParser (String, String -> Maybe a, acc -> a -> acc) | Includes a prefix for parsing e.g. "--arg=val". |
parseAll :: Monoid acc => [AnyParser acc] -> [String] -> ParseAnd acc Source #
Entrypoint for parsing arguments [String] into acc. We impose a
monoid requirement on the accumulator to take advantage of laziness.
Returns
-Left(ErrString): someStringcould not be parsed by any parser. -LeftHelp: "--help" was found -Rightacc: everyStringwas parsed successfully by some parser.
In symbols, let P = [AnyParser acc], S = [String] and define
\[
p(s) = \begin{cases}
1, &p\text{ parsed } s \text{ successfully.} \\
0, &\mathrm{otherwise}
\end{cases}
\]
Then,
\[
\mathrm{parseAll}(P, S) = \text{Right acc} \iff \forall s \in S, \exists p \in P \text{ such that } p(s) = 1
\]
module Common.Parsing.ParseAnd
module Common.Parsing.ParseOr