In Haskell, data type declarations, Parsec
parsers, and HughesPJ pretty-printers very much
resemble each other; supplying all three is
virtuous, but involves a large amount of code
duplication. syntran is a code generator designed
to reduce the amount of duplication. Its source is
similar to a Parsec LanguageDef-using parser,
annotated with the unique information from the
data type declaration and the pretty-printer which
would normally not be found in a parser. It
separates this information out to generate pure
Haskell.