
Hi, As a weekend hack, I just realized that Haskell has this wonderful DoRec syntax that among other things seems to be able to let the user express context-free grammars together with their processing rules in normal Haskell code, without template Haskell or anything like that, just like parser combinators. I am just wondering if this is this a known and useful result? Are there libraries doing similar stuff? I wrote up the Earley algorithm to demonstrate that one can in principle analyze the complete grammar (https://github.com/toyvo/haskell-earley). The result derivations `cheat` by using Data.Dynamic, but the result is quite pleasing, for example one can do: grammar :: G.Grammar (G.Rule Char E) grammar = do nat <- G.rule "NAT" [ fmap (\_ -> 0) (G.term '0') , fmap (\_ -> 1) (G.term '1') ] rec expr <- G.rule "EXPR" [ fmap Nat $ G.var nat , pure (\x _ y -> Add x y) <*> G.var expr <*> G.term '+' <*> G.var expr ] return expr Thanks, Anton