phaser-0.2.0.0: Incremental multiple pass parser library.

CopyrightJeremy List
LicenseBSD-3
Maintainerquick.dudley@gmail.com
Safe HaskellNone
LanguageHaskell2010

Codec.Phaser

Description

 

Synopsis

Documentation

data Phase p i o a Source #

A type for building Automaton values. Monad and Applicative instances are defined for this type rather than for Automaton in order to avoid traversing the entire call stack for every input value.

Instances

Link Phase Phase Phase Source # 

Methods

(>>#) :: Phase p b c x -> Phase p c t a -> Phase p b t a Source #

Link Phase Automaton Phase Source # 

Methods

(>>#) :: Phase p b c x -> Automaton p c t a -> Phase p b t a Source #

Monad (Phase p i o) Source # 

Methods

(>>=) :: Phase p i o a -> (a -> Phase p i o b) -> Phase p i o b #

(>>) :: Phase p i o a -> Phase p i o b -> Phase p i o b #

return :: a -> Phase p i o a #

fail :: String -> Phase p i o a #

Functor (Phase p i o) Source # 

Methods

fmap :: (a -> b) -> Phase p i o a -> Phase p i o b #

(<$) :: a -> Phase p i o b -> Phase p i o a #

Applicative (Phase p i o) Source # 

Methods

pure :: a -> Phase p i o a #

(<*>) :: Phase p i o (a -> b) -> Phase p i o a -> Phase p i o b #

(*>) :: Phase p i o a -> Phase p i o b -> Phase p i o b #

(<*) :: Phase p i o a -> Phase p i o b -> Phase p i o a #

Alternative (Phase p i o) Source # 

Methods

empty :: Phase p i o a #

(<|>) :: Phase p i o a -> Phase p i o a -> Phase p i o a #

some :: Phase p i o a -> Phase p i o [a] #

many :: Phase p i o a -> Phase p i o [a] #

MonadPlus (Phase p i o) Source # 

Methods

mzero :: Phase p i o a #

mplus :: Phase p i o a -> Phase p i o a -> Phase p i o a #

data Automaton p i o a Source #

Represents a nondeterministic computation in progress. There are 4 type parameters: a counter type (may be used for tracking line and column numbers), an input type, an incremental output type, and a final output type.

Instances

Link Phase Automaton Phase Source # 

Methods

(>>#) :: Phase p b c x -> Automaton p c t a -> Phase p b t a Source #

Link Automaton Automaton Automaton Source # 

Methods

(>>#) :: Automaton p b c x -> Automaton p c t a -> Automaton p b t a Source #

Functor (Automaton p i o) Source # 

Methods

fmap :: (a -> b) -> Automaton p i o a -> Automaton p i o b #

(<$) :: a -> Automaton p i o b -> Automaton p i o a #

data Position Source #

A data type for describing a position in a text file. Constructor arguments are row number and column number.

Constructors

Position !Int !Int 

(>>#) :: Link s d l => s p b c x -> d p c t a -> l p b t a Source #

Take the incremental output of the first argument and use it as input for the second argument. Discard the final output of the first argument.

(>#>) :: ((p0 -> p0) -> p -> p) -> Phase p0 i o a -> Phase p i o a infixr 1 Source #

Change the counter type of a Phase object.

(<?>) :: [Char] -> Phase p i o a -> Phase p i o a infixr 1 Source #

If parsing fails in the right argument: prepend the left argument to the errors

parse :: Phase Position i o a -> [i] -> Either [(Position, [String])] [a] Source #

Use a Phase as a parser. Note that unlike other parsers the reported position in the input when the parser fails is the position reached when all parsing options are exhausted, not the beginning of the failing token. Since the characters may be counted nondeterministically: if multiple errors are returned the reported error position may be different for each error report.

parse_ :: p -> Phase p i o a -> [i] -> Either [(p, [String])] [a] Source #

Use a Phase value similarly to a parser.

get :: Phase p i o i Source #

Return one item of the input.

count :: (p -> p) -> Phase p i o () Source #

Modify the counter

yield :: o -> Phase p i o () Source #

Yield one item for the incremental output

put1 :: i -> Phase p i o () Source #

Insert one value back into the input. May be used for implementing lookahead

put :: [i] -> Phase p i o () Source #

Put a list of values back into the input.

run :: Automaton p i o a -> [i] -> Automaton p i o a Source #

Pass a list of input values to an Automaton

step :: Automaton p i o a -> i -> Automaton p i o a Source #

Pass one input to an automaton

extract :: p -> Automaton p i o a -> Either [(p, [String])] [a] Source #

Take either counters with errors or a list of possible results from an automaton.

satisfy :: (i -> Bool) -> Phase p i o i Source #

Consume one input, return it if it matches the predicate, otherwise fail.

match :: Eq i => i -> Phase p i o i Source #

Consume one input, if it's equal to the parameter then return it, otherwise fail.

char :: Char -> Phase p Char o Char Source #

match specialized to Char

iChar :: Char -> Phase p Char o Char Source #

Case insensitive version of char

string :: Eq i => [i] -> Phase p i o [i] Source #

Match a list of input values

iString :: String -> Phase p Char o String Source #

Match a string (case insensitive)

integer :: Num a => Phase p Char o a Source #

Parse a number either from decimal digits or from hexadecimal prefixed with "0x"

decimal :: Fractional a => Phase p Char o a Source #

Parse a number from decimal digits and "."

sepBy :: Phase p i o a -> Phase p i o s -> Phase p i o [a] Source #

sepBy p sep parses zero or more occurrences of p, separated by sep. Returns a list of values returned by p.

munch :: (i -> Bool) -> Phase p i o [i] Source #

Parses the first zero or more values satisfying the predicate. Always succeds, exactly once, having consumed all the characters Hence NOT the same as (many (satisfy p))

munch1 :: (i -> Bool) -> Phase p i o [i] Source #

Parses the first one or more values satisfying the predicate. Always succeds, exactly once, having consumed all the characters Hence NOT the same as (some (satisfy p))