
Andrew Coppin
My goal is to be able to stack multiple parsers one on top of the other - but be able to *change* the stack half way through parsing if needed.
Essentially, I have the "stacked" function, where if I do
x <- stacked foo parser1 bar parser2 y <- parser3
then it runs parser2, but it uses parser1 to transform the data first.
I can't help thinking that all you really want to do is parse the same data twice, through an intermediate representation. That only requires you to feed the result of one parse into a top-level call to a different parser. For instance: this = do tmp <- parser1 x <- return (runParser parser2 bar tmp) y <- parser3 ... = runParser this foo input In the example, 'parser2' takes a different state type, and a different source token representation from 'parser1' and 'parser3'. No fearsome stack type is needed. :-) Regards, Malcolm