name: syntax version: 1.0.0.0 synopsis: Reversible parsing and pretty-printing. description: "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. I will implement them when i have the time (but these category transformers look so much more interesting for now ;). . EXAMPLES! See @syntax-example@ and @syntax-example-json@ for examples. . * "syntax-example" implements a simple lambda calculus. . * "syntax-example-json" implements a json parser and pretty printer. license: MIT license-file: LICENSE author: Paweł Nowak maintainer: Paweł Nowak copyright: Paweł Nowak 2014 category: Data build-type: Simple cabal-version: >=1.10 source-repository head type: git location: git@github.com:Pawel834/syntax.git library exposed-modules: Data.Syntax Data.Syntax.Char Data.Syntax.Combinator Data.Syntax.Indent build-depends: base >= 4 && < 5, mono-traversable, lens >= 4, semi-iso >= 1, scientific >= 0.3, text, vector default-language: Haskell2010