[Haskell-cafe] ANN: A triple of new packages for talking to the outside world

Adam Langley agl at imperialviolet.org
Mon Jan 7 13:37:42 EST 2008


On Jan 6, 2008 9:13 PM, Bryan O'Sullivan <bos at serpentine.com> wrote:
> Ooh, nice.  We could really do with an incremental version, too, which
> could be spoonfed chunks of bytes, and dole out values as
> deserialisation completes.
>
> Passing back a Left String is in some sense not much of an improvement
> over calling error, as if I merely doesn't have enough bytes accumulated
> yet, I can't restart parsing from the point the bytes ran out.  Any
> chance you'd like to hand back a continuation instead?

The Left String was just a way to return an error string, otherwise a
parse failure can be a little oblique.

I think an incremental parser would be sufficiently different that it
would be a different monad. Of course, the code duplication (again)
makes me a sad panda, but avoiding that involves a lot of work on the
binary package and the maintainers were uninterested last time I tried
that.

It would seem that there would be three possible outcomes from an
incremental Get:
  - Failure: some bitstreams are just invalid and no amount of extra
data will ever fix that
  - Complete [Result]: the last chunk of data has been processed.
Maybe this should also include the remainder of the data?
  - Partial Cont [Result]: needs more data, but here's a (possibly
empty) list of results so far.

Applying a ByteString to the Cont from the Partial result would result
in one of the same three outcomes etc.

What do you think of that? It wouldn't be too hard to make up
something like that using ContT if it would be useful to you.

AGL

-- 
Adam Langley                                      agl at imperialviolet.org
http://www.imperialviolet.org                       650-283-9641


More information about the Haskell-Cafe mailing list