[Haskell-cafe] Using Wai with Conduit and ResourceT (was Re: (New to Conduits) mixing lazy lists and Conduits?)

Jon Fairbairn jon.fairbairn at cl.cam.ac.uk
Thu Jun 28 21:05:21 UTC 2018

Michael Snoyman <michael at snoyman.com> writes:

> You can use Data.Conduit.Lazy for this.

Thanks. Not as straightforward as I had hoped, but I can see

On a different note, still attempting to learn, I am trying to
use Network.Wai.Conduit with a conduit that has effects (ie
involves sourceFile), and so lives in (ResourceT IO). eg

example:: ConduitT i (Flush Builder) (ResourceT IO) ()

Now, responseSource expects IO, not ResourceT IO, so I don’t
think I can use that, so I wrote this:

> responseSourceRes status headers res_conduit
>   = responseStream status200 headers
>     (\send flush -> runConduitRes $ res_conduit
>                     .| mapM_ (\e->lift $ 
>                                   case e of 
>                                     Chunk c -> send c
>                                     Flush -> flush ))

which runs, but (rather to my surprise) doesn’t produce output
(not even headers) until all the effects have completed. That
gives rise to two questions:

Why does that not stream output?
What should I do instead?

Jón Fairbairn                                 Jon.Fairbairn at cl.cam.ac.uk

More information about the Haskell-Cafe mailing list