- To be able to extract the grammar, implement all combinators as constructors in a data type!
data P a where Nil :: a -> P a Ap :: P (b->a) -> P b -> P a Token :: (String->Maybe a) -> String -> P a (:--) :: P a -> String -> P a (:!) :: P a -> P a -> P a Many :: P a -> P [a] ...

- But...