Context-free and linear grammars in Haskell (parsing, pretty-printing, embedded DSL)