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

Reply via email to