Text.ParserCombinators.Parsec.Perm

parsec-3.1.9: Monadic parser combinators

Copyright | (c) Paolo Martini 2007
License | BSD-style (see the LICENSE file)
Maintainer | derek.a.elkins@gmail.com
Stability | provisional
Portability | portable
Safe Haskell | Safe
Language | Haskell98

Text.ParserCombinators.Parsec.Perm

Description

Parsec compatibility module

Synopsis

- type PermParser tok st a = StreamPermParser String st a
- permute :: Stream s Identity tok => StreamPermParser s st a -> Parsec s st a
- (<||>) :: Stream s Identity tok => StreamPermParser s st (a -> b) -> Parsec s st a -> StreamPermParser s st b
- (<$$>) :: Stream s Identity tok => (a -> b) -> Parsec s st a -> StreamPermParser s st b
- (<|?>) :: Stream s Identity tok => StreamPermParser s st (a -> b) -> (a, Parsec s st a) -> StreamPermParser s st b
- (<$?>) :: Stream s Identity tok => (a -> b) -> (a, Parsec s st a) -> StreamPermParser s st b

# Documentation

type PermParser tok st a = StreamPermParser String st a

Provided for backwards compatibility. The tok type is ignored.

permute :: Stream s Identity tok => StreamPermParser s st a -> Parsec s st a

The parser `permute perm` parses a permutation of parser described by `perm`. For example, suppose we want to parse a permutation of: an optional string of `a`'s, the character `b` and an optional `c`. This can be described by:

     test  = permute (tuple <$?> ("",many1 (char 'a'))
                            <||> char 'b'
                            <|?> ('_',char 'c'))
           where
             tuple a b c  = (a,b,c)

(<||>) :: Stream s Identity tok => StreamPermParser s st (a -> b) -> Parsec s st a -> StreamPermParser s st b infixl 1

The expression `perm <||> p` adds parser `p` to the permutation parser `perm`. The parser `p` is not allowed to accept empty input - use the optional combinator (`<|?>`) instead. Returns a new permutation parser that includes `p`.

(<$$>) :: Stream s Identity tok => (a -> b) -> Parsec s st a -> StreamPermParser s st b infixl 2

The expression `f <$$> p` creates a fresh permutation parser consisting of parser `p`. The the final result of the permutation parser is the function `f` applied to the return value of `p`. The parser `p` is not allowed to accept empty input - use the optional combinator (`<$?>`) instead.

If the function `f` takes more than one parameter, the type variable `b` is instantiated to a functional type which combines nicely with the adds parser `p` to the (`<||>`) combinator. This results in stylized code where a permutation parser starts with a combining function `f` followed by the parsers. The function `f` gets its parameters in the order in which the parsers are specified, but actual input can be in any order.

(<|?>) :: Stream s Identity tok => StreamPermParser s st (a -> b) -> (a, Parsec s st a) -> StreamPermParser s st b infixl 1

The expression `perm <||> (x,p)` adds parser `p` to the permutation parser `perm`. The parser `p` is optional - if it can not be applied, the default value `x` will be used instead. Returns a new permutation parser that includes the optional parser `p`.

(<$?>) :: Stream s Identity tok => (a -> b) -> (a, Parsec s st a) -> StreamPermParser s st b infixl 2

The expression `f <$?> (x,p)` creates a fresh permutation parser consisting of parser `p`. The the final result of the permutation parser is the function `f` applied to the return value of `p`. The parser `p` is optional - if it can not be applied, the default value `x` will be used instead.