boomerang-1.4.1: Library for invertible parsing and printing

Safe HaskellNone





newtype Parser e tok a Source

Yet another parser.

Returns all possible parses and parse errors




runParser :: tok -> Pos e -> [Either e ((a, tok), Pos e)]


Monad (Parser e tok) 
Functor (Parser e tok) 
MonadPlus (Parser e tok) 

data Boomerang e tok a b Source

A Boomerang a b takes an a to parse a URL and results in b if parsing succeeds. And it takes a b to serialize to a URL and results in a if serializing succeeds.




prs :: Parser e tok (a -> b)
ser :: b -> [(tok -> tok, a)]


Category (Boomerang e tok) 
~ * a b => IsString (Boomerang StringError String a b) 
~ * a b => IsString (Boomerang StringsError [String] a b) 
~ * a b => IsString (Boomerang TextsError [Text] a b) 
Monoid (Boomerang e tok a b) 

type PrinterParser = BoomerangSource

Deprecated: Use Boomerang instead

(.~) :: Boomerang e tok a b -> Boomerang e tok b c -> Boomerang e tok a cSource

Reverse composition, but with the side effects still in left-to-right order.

Running routers

parse :: forall e a p tok. InitialPosition e => Boomerang e tok () a -> tok -> [Either e (a, tok)]Source

Give all possible parses or errors.

parse1 :: (ErrorPosition e, InitialPosition e, Show e, Ord (Pos e)) => (tok -> Bool) -> Boomerang e tok () (a :- ()) -> tok -> Either [e] aSource

Give the first parse, for Boomerangs with a parser that yields just one value. Otherwise return the error (or errors) with the highest error position.

unparse :: tok -> Boomerang e tok () url -> url -> [tok]Source

Give all possible serializations.

unparse1 :: tok -> Boomerang e tok () (a :- ()) -> a -> Maybe tokSource

Give the first serialization, for Boomerangs with a serializer that needs just one value.

bestErrors :: (ErrorPosition e, Ord (Pos e)) => [e] -> [e]Source

Attempt to extract the most relevant errors from a list of parse errors.

The current heuristic is to find error (or errors) where the error position is highest.

Constructing / Manipulating Boomerangs

xpure :: (a -> b) -> (b -> Maybe a) -> Boomerang e tok a bSource

Lift a constructor-destructor pair to a pure router.

val :: forall e tok a r. Parser e tok a -> (a -> [tok -> tok]) -> Boomerang e tok r (a :- r)Source

lift a Parser and a printer into a Boomerang

xmap :: (a -> b) -> (b -> Maybe a) -> Boomerang e tok r a -> Boomerang e tok r bSource

Map over routers.

xmaph :: (a -> b) -> (b -> Maybe a) -> Boomerang e tok i (a :- o) -> Boomerang e tok i (b :- o)Source

Like xmap, but only maps over the top of the stack.