Another picky nit: The monad transformer type is defined as such:
> data ParsecT s u m a > = ParsecT { runParsecT :: State s u -> m (Consumed (m (Reply s u a))) } with the Consumed and reply types as: > data Consumed a = Consumed a > | Empty !a > data Reply s u a = Ok !a !(State s u) ParseError > | Error ParseError What's the advantage of having a double-wrapping of the base monad `m' over the simpler type: data ParsecT s u m a = ParsecT { runParsecT :: State s u -> m (Consumed (Reply s u a)) } -Antoine _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe