It's not OK and it's an artifact of the weak-typing and ill-defined semantics 
that pervade iteratee libraries. It's possible to do a lot of bad stuff, 
including binding with an iteratee yielding a remainder without consuming input.

Regards,

John A. De Goes
Twitter: @jdegoes 
LinkedIn: http://linkedin.com/in/jdegoes

On Apr 19, 2011, at 6:27 AM, Daniel Schüssler wrote:

> 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


_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to