
On 05/11/2013 11:04 AM, Michael Snoyman wrote:
It's quite old at this point, but you may be interested in reading the initial motivations for creating conduit when the iteratee pattern (and enumerator library in particular) already existed:
https://github.com/snoyberg/conduit/blob/master/README.md#general-goal
I would say the only real component missing from your list is being able to structure significantly more complicated control flows, such as the use case of combining a web server and web client into a web proxy. That was probably the example which finally pushed me to start thinking seriously about an enumerator replacement. In conduit, this use case is addressed by connect-and-resume, which essentially allows you to escape the inversion of control normally introduced by the conduit pattern.
Speaking of escaping inversion of control, I'm going to take a moment to shamelessly plug this post of mine showing that you can escape the pipe monad using a trick uncannily similar to `io-streams`: http://www.haskellforall.com/2013/04/pipes-and-io-streams.html It's not equivalent to `conduit`'s connect and resume, though, which is very different.