ANNOUNCE: enumerator 0.4.8

Michael Snoyman michael at
Sat Mar 26 18:46:01 CET 2011

Great work as usual John. I'm actually very happy to see
enumHandleRange: the next version of WAI will support partial files,
and I just implemented my own version of enumHandleRange over there. I
will gladly switch to your (most likely more correct) version.

As far as the left-over data in a yield issue: does that require a
breaking API change, or a change to the definition of >>= which would
change semantics??


On Sat, Mar 26, 2011 at 7:39 AM, John Millikin <jmillikin at> wrote:
> -----------------------------------------------------------------------------------------------------------------------------------------------------
> Enumerators are an efficient, predictable, and safe alternative to
> lazy I/O. Discovered by Oleg Kiselyov, they allow large datasets to be
> processed in near–constant space by pure code. Although somewhat more
> complex to write, using enumerators instead of lazy I/O produces more
> correct programs.
> -----------------------------------------------------------------------------------------------------------------------------------------------------
> Hello -cafe,
> It's been a while since the last point release of enumerator. This one
> is sufficiently large that I think folks might want to know about it,
> and since I try not to spam too many announcements, I'll give a quick
> rundown on major changes in other 0.4.x versions as well.
> First, most of what I call "list analogues" -- enumerator-based
> versions of 'head', 'take', 'map', etc -- have been separated into
> three modules (Data.Enumerator.List, .Binary, and .Text) depending on
> what sorts of data they operate on. This separation has been an
> ongoing process throughout 0.4.x releases, and I think it's now
> complete. The old names in Data.Enumerator will continue to exist in
> 0.4.x versions, but will be removed in 0.5.
> Second, Gregory Collins and Ertugrul Soeylemez found a space leak in
> Iteratee's (>>=), which could cause eventual space exhaustion in some
> circumstances. If you use enumerators to process very large or
> infinite streams, you probably want to upgrade to version 0.4.7 or
> higher.
> Third, the source code PDF has seen some substantial improvement -- if
> you're interested in how the library is implemented, or have insomnia,
> read it at <
> Finally, there is a known issue in the current encoding of iteratees
> -- if an iteratee yields extra data but never consumed anything, that
> iteratee will violate the monad law of associativity. Oleg has updated
> his implementations to fix this problem, but since it would break a
> *lot* of dependent libraries, I'm holding off until the vague future
> of version 0.5. Since iteratees that yield extra data they didn't
> consume are invalid anyway, I hope this problem will not cause too
> much inconvenience.
> New features
> -----------------
> * Range-limited binary file enumeration (requested + initial patch by
> Bardur Arantsson).
> * splitWhen , based on the "split" package <
> >
> * 0.4.6: Typeable instances for most types (requested by Michael Snoyman)
> * 0.4.5: joinE , which simplifies enumerator/enumeratee composition
> (requested by Michael Snoyman)
> _______________________________________________
> Libraries mailing list
> Libraries at

More information about the Libraries mailing list