On 2/3/11 8:05 AM, John Lato wrote:
I don't have too much to add to Maciej and Oleg's reply, except that I'd
recommend looking at the Wave codec over the Tiff reader in those versions
of iteratee.  I don't think that's the only problem, though, because then
you'd be getting a "Divergent iteratee" error.

I'll try taking a look at them. I hadn't because I know nothing about Tiff and Wave formats, so I wouldn't know what I'm looking at regarding the gritty details of iteratee semantics. The error handling stuff is by far the murkiest part of the various iteratee designs IMO.


The "endOfInput" error is suspicious, and I think you'll need to track it
down to solve this problem.  It doesn't appear to be from either iteratee or
protocol-buffers.  Could it be coming from your IO library?  I wonder if the
enumerator is trying to force a read after EOF has been reached for some
reason?

That's definitely the suspicious bit. It's not coming from any of my code (including the hprotoc-generated code), and I didn't see anything in iteratee nor protocol-buffers that could throw it either...

I just got fed up with it and ran `strings` on all the libraries I link against, and the only one that turns up with "endOfInput" is attoparsec (which has a function by that name). But I'm not using attoparsec anywhere near this segment of code... Well, it's a lead at least.


As an experiment, you could try using a custom convStream function like
this:

convStream2
    :: Monad m
    => IterateeG s el m (Maybe (s' el'))
    -> EnumeratorN s el s' el' m a
convStream2 fi iter = fi >>= check
    where
    check (Just xs) = lift (runIter iter $ Chunk xs) >>= docase
    check (Nothing) = return iter
    docase (Done a _)                   = return $ return a
    docase (Cont k Nothing)             = convStream2 fi k
    docase (Cont k (Just "endOfInput")) = convStream2 (return Nothing) k
    docase (Cont _ (Just e))            = return $ throwErr e

This may help determine if it's a problem with IO or with the message
parsing.

Thanks, that's a good idea.

--
Live well,
~wren

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

Reply via email to