parsec-3.1.14.0: 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 Haskell2010

Text.ParserCombinators.Parsec.Perm

Description

Parsec compatibility module

Synopsis

Documentation

type PermParser tok st a = StreamPermParser String st a Source #

Provided for backwards compatibility. The tok type is ignored.

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

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 Source #

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 Source #

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 Source #

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 Source #

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.