This library provides an interface to build programs that can be interpreted both as parsers and as printers.
This library essentially defines two types:
Parser :: * -> * -> *
, a wrapper aroundattoparsec
's ownParser :: * -> *
;Printer :: * -> * -> *
, a type which does the inverse of a parser;
and a type class Attoparsec
, instantiated by Parser
and Printer
, wrapping
attoparsec
's core operations (including lookaheads!).
Monadic and applicative composition can be used under a ForallF Monad p
constraint
(resp. ForallF Applicative p
), meaning that for all types x
, the type p x
is an instance of Monad
(resp. Applicative
). These constraints are made
possible thanks to the constraints
package. The
profunctor-monad
package
provides convenient ways to work with them (with
or rebindable syntax).
Check out example/AesonParser.hs