Andrew Coppin <[EMAIL PROTECTED]> wrote: > 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 _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe