On Thu, Jul 29, 2010 at 10:55 AM, Jason Dagit <da...@codersbase.com> wrote:

> Given those constructors for Result, how will you decode a sequence lazily?
>

I deliberately left incremental results out of the attoparsec API, because
it's a burrito-filled spacesuit of worms.

The problem is that parsers can nest and fail and backtrack and be, in
general, arbitrarily perverse. For instance, if there was a "yield" action,
I could yield you a 1, backtrack, then yield you a 10 from some completely
different branch of the parser that neither I nor you could foresee.

Now, lazily parsing a sequence of data is a very common need, and it's also
highly constrained, and hence easy to predict. It's also something that's
easy to write without any access to the attoparsec internals. It would take
just a few moments to write this:

parseSequence :: Parser a -> Lazy.ByteString -> [a]

I haven't added this to attoparsec because it's (a) trivial and (b) just one
possible approach. Using iteratees would be another; running with a monadic
action that can refill the parser on a Partial result would be yet another.
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to