Hello, for reference, said instance is:
> instance Monad m => Monad (Iteratee a m) where > return x = yield x (Chunks []) > > m0 >>= f = ($ m0) $ fix $ > \bind m -> Iteratee $ runIteratee m >>= \r1 -> > case r1 of > Continue k -> return (Continue (bind . k)) > Error err -> return (Error err) > Yield x (Chunks []) -> runIteratee (f x) > Yield x extra -> runIteratee (f x) >>= \r2 -> > case r2 of > Continue k -> runIteratee (k > extra) > Error err -> return (Error err) > Yield x' _ -> return (Yield x' > extra) The thing I don't understand yet is the last line: Why is it OK to discard the leftover input from the (f x) Iteratee and yield just the leftover input from the first one (m0)? Cheers, Daniel _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe