[Haskell-cafe] monadic DSL for compile-time parser generator, not possible?

Jacques Carette carette at mcmaster.ca
Tue Mar 12 21:32:58 CET 2013


On 13-03-12 04:06 PM, Jeremy Shaw wrote:
> It would be pretty damn cool if you could create a data type for
> generically describing a monadic parser, and then use template haskell
> to generate a concrete parser from that data type. [...]
> I would like to suggest that while it would be cool, it is
> impossible.

Impossibility proofs are notoriously difficult.  You showed that this 
approach:

>> data ParserSpec a where
>>      AnyChar :: ParserSpec Char
>>      Return  :: a -> ParserSpec a
>>      Join    :: ParserSpec (ParserSpec a) -> ParserSpec a
>>      FMap    :: (a -> b) -> ParserSpec a -> ParserSpec b

does not work.  The flaw is indeed in FMap.  It should not take a 
function as first argument, but rather a *description* of a function 
(the same way ParserSpec gives you a description of a parser).  Then you 
can make it work, if your 'description' language is adequate.

For some strange reason, I am biased towards 'finally tagless' 
descriptions, but YMMV.

Jacques



More information about the Haskell-Cafe mailing list