The syntax package

[Tags:library, mit]

syntax allows you to write a single syntax description and instantiate is both as a parser and a pretty printer.

Syntax descriptions are written in applicative or arrow style. The library uses a custom typeclass hierarchy, provided by the semi-iso package. Most of the time you will be using operators like /$/, /*/ and /+/ (= <|>), just like parser combinators. When more power is needed - e.g. when the syntax depends on the parsed or printed value - you turn to arrows.

Semi-isomorphisms from semi-iso are the basic building block of syntax descriptions. I recommend reading the hackage page of semi-iso first, as it contains much more information.

Once you write a syntax description (polymorphic in the syntax category) you can instantiate it both as a parser or as a pretty-printer. The library syntax-attoparsec gives you the ability to extract an Attoparsec parser. Pretty-printing is implemented by the syntax-printer library, which uses Text and ByteString builders. (Note that formatting is handled by syntax itself, not by the printer library)

Advanced formatting and parsing (for example indentation, haskell layout rule) is implemented as category transformers (similar to monad transformers). Currently only simple indentation is implemented (in Data.Syntax.Indent) - basically a reader category transformer that tracks current indentation level. I plan on implementing Haskell layout rule in the future.

The library can work with both text and binary data. Alas, there are no binary combinators implemented yet.

EXAMPLES! See syntax-example and syntax-example-json for examples.


Dependencies base (==4.*), lens (>=4), mono-traversable, scientific (>=0.3), semi-iso (>=1), text, vector [details]
License MIT
Copyright Paweł Nowak 2014
Author Paweł Nowak
Maintainer Paweł Nowak <>
Stability Unknown
Category Data
Source repository head: git clone
Uploaded Fri Dec 12 23:30:44 UTC 2014 by pawel834
Updated Thu Nov 19 04:05:20 UTC 2015 by pawel834 to revision 2
Distributions NixOS:
Downloads 971 total (9 in the last 30 days)
0 []
Status Docs uploaded by user [build log]
All reported builds failed as of 2014-12-12 [all 1 reports]




Maintainer's Corner

For package maintainers and hackage trustees