[Haskell-cafe] Yet another Conduit question

Simon Marechal simon at banquise.net
Thu Jan 31 16:12:06 CET 2013

I am working with bulk sources and sinks, that is with a type like:

Source m [a]
Sink [a] m ()

The problem is that I would like to work on individual values in my
conduit. I can have this:

concat :: (Monad m) => Conduit [a] m a
concat = awaitForever (mapM_ yield)

But how can I do it the other way around ? I suppose it involves pattern
matching on the different states my conduit might me in. But is that
even possible to do it in a "non blocking" way, that is catenate data
while there is something to read (up to a certain threshold), and send
it as soon as there is nothing left to read ? Or doesn't that make any
sense in the context of Conduits (in the sense that this conduit will be
recheck for input before the upstream conduits will have a chance to
operate) ?

Another approach would be to have a map equivalent:

conduitMap :: Conduit i m o -> Conduit [i] m [o]

But I am not sure how to do this either ...

More information about the Haskell-Cafe mailing list