Copyright | Copyright Waived |
---|---|

License | PublicDomain |

Maintainer | grantslatton@gmail.com |

Stability | experimental |

Portability | portable |

Safe Haskell | Safe |

Language | Haskell98 |

The bread and butter of combinatory parsing.

- assert :: Stream s t => Bool -> Parser s ()
- eof :: Stream s t => Parser s ()
- eitherP :: Stream s t => Parser s a -> Parser s b -> Parser s (Either a b)
- greedy :: Stream s t => Parser s a -> Parser s a
- guard :: Stream s t => Bool -> Parser s ()
- lookAhead :: Stream s t => Parser s a -> Parser s a
- notFollowedBy :: Stream s t => Parser s a -> Parser s ()
- option :: Stream s t => a -> Parser s a -> Parser s a
- optional :: Stream s t => Parser s a -> Parser s (Maybe a)
- test :: Stream s t => Parser s a -> Parser s Bool
- (<|>) :: Stream s t => Parser s a -> Parser s a -> Parser s a
- anyToken :: Stream s t => Parser s t
- noneOf :: (Eq t, Stream s t) => [t] -> Parser s t
- oneOf :: (Eq t, Stream s t) => [t] -> Parser s t
- satisfy :: Stream s t => (t -> Bool) -> Parser s t
- token :: (Eq t, Stream s t) => t -> Parser s t
- chainl :: Stream s t => Parser s a -> Parser s (a -> a -> a) -> a -> Parser s a
- chainl1 :: Stream s t => Parser s a -> Parser s (a -> a -> a) -> Parser s a
- chainr :: Stream s t => Parser s a -> Parser s (a -> a -> a) -> a -> Parser s a
- chainr1 :: Stream s t => Parser s a -> Parser s (a -> a -> a) -> Parser s a
- count :: Stream s t => Int -> Parser s a -> Parser s [a]
- endBy :: Stream s t => Parser s a -> Parser s b -> Parser s [a]
- endBy1 :: Stream s t => Parser s a -> Parser s b -> Parser s [a]
- exactly :: Stream s t => Int -> Parser s a -> Parser s [a]
- many :: Stream s t => Parser s a -> Parser s [a]
- many1 :: Stream s t => Parser s a -> Parser s [a]
- mN :: Stream s t => Int -> Int -> Parser s a -> Parser s [a]
- sepBy :: Stream s t => Parser s a -> Parser s b -> Parser s [a]
- sepBy1 :: Stream s t => Parser s a -> Parser s b -> Parser s [a]
- skipMany :: Stream s t => Parser s a -> Parser s ()
- skipMany1 :: Stream s t => Parser s a -> Parser s ()
- sepEndBy :: Stream s t => Parser s a -> Parser s b -> Parser s [a]
- sepEndBy1 :: Stream s t => Parser s a -> Parser s b -> Parser s [a]
- takeWhile :: Stream s t => (t -> Bool) -> Parser s [t]
- choice :: Stream s t => [Parser s a] -> Parser s a
- perm :: Stream s t => [Parser s a] -> Parser s [a]
- select :: Stream s t => [Parser s a] -> Parser s (Int, a)
- branch :: Parser s a -> Parser s a -> Parser s a
- (<||>) :: Parser s a -> Parser s a -> Parser s a
- chainl_ :: Stream s t => Parser s a -> Parser s (a -> a -> a) -> a -> Parser s a
- chainr_ :: Stream s t => Parser s a -> Parser s (a -> a -> a) -> a -> Parser s a
- chainl1_ :: Stream s t => Parser s a -> Parser s (a -> a -> a) -> Parser s a
- chainr1_ :: Stream s t => Parser s a -> Parser s (a -> a -> a) -> Parser s a
- choice_ :: Stream s t => [Parser s a] -> Parser s a
- eitherP_ :: Stream s t => Parser s a -> Parser s b -> Parser s (Either a b)
- endBy_ :: Stream s t => Parser s a -> Parser s b -> Parser s [a]
- endBy1_ :: Stream s t => Parser s a -> Parser s b -> Parser s [a]
- many_ :: Parser s a -> Parser s [a]
- many1_ :: Parser s a -> Parser s [a]
- mN_ :: Stream s t => Int -> Int -> Parser s a -> Parser s [a]
- option_ :: Stream s t => a -> Parser s a -> Parser s a
- optional_ :: Stream s t => Parser s a -> Parser s (Maybe a)
- perm_ :: Stream s t => [Parser s a] -> Parser s [a]
- select_ :: Stream s t => [Parser s a] -> Parser s (Int, a)
- sepBy_ :: Stream s t => Parser s a -> Parser s b -> Parser s [a]
- sepBy1_ :: Stream s t => Parser s a -> Parser s b -> Parser s [a]
- sepEndBy_ :: Stream s t => Parser s a -> Parser s b -> Parser s [a]
- sepEndBy1_ :: Stream s t => Parser s a -> Parser s b -> Parser s [a]
- skipMany_ :: Stream s t => Parser s a -> Parser s ()
- skipMany1_ :: Stream s t => Parser s a -> Parser s ()
- takeWhile_ :: Stream s t => (t -> Bool) -> Parser s [t]

# Utility Parsers

greedy :: Stream s t => Parser s a -> Parser s a Source

Modifies a parser so that it will ony return the most consumptive succesful results.

lookAhead :: Stream s t => Parser s a -> Parser s a Source

Applies the parser and returns its result, but resets
the `Stream`

as if it consumed nothing.

notFollowedBy :: Stream s t => Parser s a -> Parser s () Source

Only succeeds when the given parser fails. Consumes no input.

option :: Stream s t => a -> Parser s a -> Parser s a Source

Attempts to apply a parser and returns a default value if it fails.

(<|>) :: Stream s t => Parser s a -> Parser s a -> Parser s a infixr 1 Source

`a <|> b`

is equivalent to

. That is, first `choice`

[a,b]`a`

is
tried, and if it yields no results, `b`

is tried.

# Token Parsers

noneOf :: (Eq t, Stream s t) => [t] -> Parser s t Source

Parse a token that is not a member of the list of tokens.

oneOf :: (Eq t, Stream s t) => [t] -> Parser s t Source

Parse a token that is a member of the list of tokens.

# Repetetive Parsers

chainl :: Stream s t => Parser s a -> Parser s (a -> a -> a) -> a -> Parser s a Source

`chainr p o x`

parses zero or more occurences of `p`

separated by `o`

.
The result is the left associative application of the functions to the
values. If `p`

succeeds zero times, `x`

is returned.

chainl1 :: Stream s t => Parser s a -> Parser s (a -> a -> a) -> Parser s a Source

Like `chainl`

, but a minimum of one occurence of `p`

must be parsed.

chainr :: Stream s t => Parser s a -> Parser s (a -> a -> a) -> a -> Parser s a Source

Like `chainl`

, but right associative.

chainr1 :: Stream s t => Parser s a -> Parser s (a -> a -> a) -> Parser s a Source

Like `chainl1`

, but right associative.

count :: Stream s t => Int -> Parser s a -> Parser s [a] Source

`count n p`

parses exactly `n`

occurences of `p`

.

endBy :: Stream s t => Parser s a -> Parser s b -> Parser s [a] Source

`endBy p s`

parses multiple occurences of `p`

separated and ended by
`s`

.

endBy1 :: Stream s t => Parser s a -> Parser s b -> Parser s [a] Source

`endBy1 p s`

parses one or more occurences of `p`

separated and ended
by `s`

.

mN :: Stream s t => Int -> Int -> Parser s a -> Parser s [a] Source

`mN m n p`

parses between `m`

and `n`

occurences of `p`

, inclusive.

sepBy :: Stream s t => Parser s a -> Parser s b -> Parser s [a] Source

`sepBy1 p s`

parses many occurences of `p`

separated by `s`

.

sepBy1 :: Stream s t => Parser s a -> Parser s b -> Parser s [a] Source

`sepBy1 p s`

parses one or more occurences of `p`

separated by `s`

.

skipMany :: Stream s t => Parser s a -> Parser s () Source

Identical to `many`

except the result is discarded.

skipMany1 :: Stream s t => Parser s a -> Parser s () Source

Identical to `many1`

except the result is discarded.

sepEndBy :: Stream s t => Parser s a -> Parser s b -> Parser s [a] Source

`sepEndBy p s`

parses multiple occurences of `p`

separated and
optionally ended by `s`

.

sepEndBy1 :: Stream s t => Parser s a -> Parser s b -> Parser s [a] Source

`sepEndBy p s`

parses one or more occurences of `p`

separated and
optionally ended by `s`

.

takeWhile :: Stream s t => (t -> Bool) -> Parser s [t] Source

Parse tokens while a predicate remains true.

# Group Parsers

choice :: Stream s t => [Parser s a] -> Parser s a Source

Attempt to apply each parser in the list in order until one succeeds.

select :: Stream s t => [Parser s a] -> Parser s (Int, a) Source

Like `choice`

, but returns the index of the successful parser as well
as the result.

# Branching Parsers

branch :: Parser s a -> Parser s a -> Parser s a Source

Splits the current parse branch between the two parsers.

chainl_ :: Stream s t => Parser s a -> Parser s (a -> a -> a) -> a -> Parser s a Source

Branches every iteration where one branch stops and one branch continues.

chainr_ :: Stream s t => Parser s a -> Parser s (a -> a -> a) -> a -> Parser s a Source

Branches every iteration where one branch stops and one branch continues.

chainl1_ :: Stream s t => Parser s a -> Parser s (a -> a -> a) -> Parser s a Source

Branches every iteration where one branch stops and one branch continues.

chainr1_ :: Stream s t => Parser s a -> Parser s (a -> a -> a) -> Parser s a Source

Branches every iteration where one branch stops and one branch continues.

choice_ :: Stream s t => [Parser s a] -> Parser s a Source

Given a list of parsers, split off a branch for each one.

eitherP_ :: Stream s t => Parser s a -> Parser s b -> Parser s (Either a b) Source

Like `eitherP`

, but tries both `a`

and `b`

.

endBy_ :: Stream s t => Parser s a -> Parser s b -> Parser s [a] Source

Branches every iteration where one branch stops and one branch continues.

endBy1_ :: Stream s t => Parser s a -> Parser s b -> Parser s [a] Source

Branches every iteration where one branch stops and one branch continues.

many_ :: Parser s a -> Parser s [a] Source

Branches every iteration where one branch stops and one branch continues.

many1_ :: Parser s a -> Parser s [a] Source

Branches every iteration where one branch stops and one branch continues.

mN_ :: Stream s t => Int -> Int -> Parser s a -> Parser s [a] Source

Branches every iteration where one branch stops and one branch continues.

option_ :: Stream s t => a -> Parser s a -> Parser s a Source

Splits off two branches, one where the parse is attempted, and one where it is not.

optional_ :: Stream s t => Parser s a -> Parser s (Maybe a) Source

Splits off two branches, one where the parse is attempted, and one where it is not.

perm_ :: Stream s t => [Parser s a] -> Parser s [a] Source

Parses a sequence of parsers in all possible orders.

select_ :: Stream s t => [Parser s a] -> Parser s (Int, a) Source

Like `choice_`

, but returns the index of the successful parser.

sepBy_ :: Stream s t => Parser s a -> Parser s b -> Parser s [a] Source

Branches every iteration where one branch stops and one branch continues.

sepBy1_ :: Stream s t => Parser s a -> Parser s b -> Parser s [a] Source

Branches every iteration where one branch stops and one branch continues.

sepEndBy_ :: Stream s t => Parser s a -> Parser s b -> Parser s [a] Source

Branches every iteration where one branch stops and one branch continues.

sepEndBy1_ :: Stream s t => Parser s a -> Parser s b -> Parser s [a] Source

Branches every iteration where one branch stops and one branch continues.

skipMany_ :: Stream s t => Parser s a -> Parser s () Source

Branches every iteration where one branch stops and one branch continues.

skipMany1_ :: Stream s t => Parser s a -> Parser s () Source

Branches every iteration where one branch stops and one branch continues.

takeWhile_ :: Stream s t => (t -> Bool) -> Parser s [t] Source

Branches every iteration where one branch stops and one branch continues.