
Ok. I've checked iteratee-0.8.3.0 and 0.8.4.0. Results are same.
Sergey
2011/6/2 John Lato
Hi Sergey, I can't explain this; maybe it's a bug in enumWith? I'll look into it. Thanks, John
Message: 20
Date: Thu, 2 Jun 2011 02:46:32 +0400 From: Sergey Mironov
Subject: [Haskell-cafe] [iteratee] how to do nothing .. properly To: haskell-cafe@haskell.org Message-ID: Content-Type: text/plain; charset=ISO-8859-1 Hi. Would anybody explain a situation with iter6 and iter7 below? Strange thing - first one consumes no intput, while second consumes it all, while all the difference is peek which should do no processing (just copy next item in stream and return to user). What I am trying to do - is to write an iteratee consuing no input, but returning a constant I give to it. I thought (return a) should do it, but it seems I was wrong as return actually consumes all unparsed stream. iter6 experience tells me that (peek>>return a) is what I need, but it's completely confusing and not what I expected.
Thanks, Sergey
import Data.Iteratee as I import Data.Iteratee.IO import Control.Monad import Control.Exception import Data.ByteString import Data.Char import Data.String
-- countBytes :: (..., Num b) => Iteratee s m a -> Iteratee s m (a, b) countBytes i = enumWith i I.length
iter6 = do h <- countBytes $ (peek >> return 0) s <- I.stream2list return (h,s)
iter7 = do h <- countBytes $ (return 0) s <- I.stream2list return (h,s)
print6 = enumPure1Chunk [1..10] (iter6) >>= run >>= print print7 = enumPure1Chunk [1..10] (iter7) >>= run >>= print
Here is example ghci session
*Main> print6 ((0,0),[1,2,3,4,5,6,7,8,9,10]) -- read 0 items, returns 0 *Main> print7 ((0,10),[]) -- read 10 items (???) returns 0 *Main>
------------------------------
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
End of Haskell-Cafe Digest, Vol 94, Issue 3 *******************************************