Safe Haskell | None |
---|---|
Language | Haskell98 |
- newtype Parser e tok a = Parser {}
- data Boomerang e tok a b = Boomerang {}
- type PrinterParser = Boomerang
- (.~) :: Boomerang e tok a b -> Boomerang e tok b c -> Boomerang e tok a c
- parse :: forall e a p tok. InitialPosition e => Boomerang e tok () a -> tok -> [Either e (a, tok)]
- parse1 :: (ErrorPosition e, InitialPosition e, Show e, Ord (Pos e)) => (tok -> Bool) -> Boomerang e tok () (a :- ()) -> tok -> Either [e] a
- unparse :: tok -> Boomerang e tok () url -> url -> [tok]
- unparse1 :: tok -> Boomerang e tok () (a :- ()) -> a -> Maybe tok
- bestErrors :: (ErrorPosition e, Ord (Pos e)) => [e] -> [e]
- xpure :: (a -> b) -> (b -> Maybe a) -> Boomerang e tok a b
- val :: forall e tok a r. Parser e tok a -> (a -> [tok -> tok]) -> Boomerang e tok r (a :- r)
- xmap :: (a -> b) -> (b -> Maybe a) -> Boomerang e tok r a -> Boomerang e tok r b
- xmaph :: (a -> b) -> (b -> Maybe a) -> Boomerang e tok i (a :- o) -> Boomerang e tok i (b :- o)
Types
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.
type PrinterParser = Boomerang Source #
Deprecated: Use Boomerang instead
(.~) :: Boomerang e tok a b -> Boomerang e tok b c -> Boomerang e tok a c infixr 9 Source #
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] a Source #
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.
unparse1 :: tok -> Boomerang e tok () (a :- ()) -> a -> Maybe tok Source #
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 b Source #
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 #