[Haskell-cafe] Question about the Monad instance for Iteratee (from the enumerator package)
Daniel Schüssler
anotheraddress at gmx.de
Tue Apr 19 14:27:47 CEST 2011
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
More information about the Haskell-Cafe
mailing list