<div dir="ltr">I've updated that Gist to be compatible with WAI 3.0. The basic changes I made were:<br><br>1. Change the way Warp settings are applied (no longer use record syntax, but explicit set* functions).<div>2. conduit is no longer the standard streaming interface for WAI, so imported Network.Wai.Conduit and used helper functions from there.</div><div>3. The specific question you asked about: the semantics for how to do resource allocation in an application have changed. There were some holes in the previous approach that allowed async exceptions to leak in at the wrong time. Instead, WAI 3.0 uses a similar interface to most resource allocation functions in Haskell (like bracket or withFile). Specifically, this looks like:</div><br><br><pre style="color:rgb(0,0,0);line-height:normal;word-wrap:break-word;white-space:pre-wrap">    HCl.withResponse req2 man $ \res -> do
        let body = mapOutput (Chunk . fromByteString) $ HCC.bodyReaderSource $ HCl.responseBody res
            headers = filter safeResHeader $ HCl.responseHeaders res
        respond $ responseSource (HCl.responseStatus res) headers body</pre><br>Some notes on this are available at:<div><br></div><div>* <a href="http://hackage.haskell.org/package/wai-3.0.2.3/docs/Network-Wai.html#t:Application">http://hackage.haskell.org/package/wai-3.0.2.3/docs/Network-Wai.html#t:Application</a></div><div>* <a href="http://www.yesodweb.com/book/web-application-interface#web-application-interface_resource_allocation">http://www.yesodweb.com/book/web-application-interface#web-application-interface_resource_allocation</a><br><div><pre style="word-wrap:break-word"><span style="color:rgb(33,33,33);line-height:20px;white-space:pre-wrap;font-family:'Helvetica Neue',Helvetica,Arial,sans-serif;font-size:13.1999998092651px">On Fri, Mar 6, 2015 at 10:58 AM Jos van den Oever <<a href="mailto:jos@vandenoever.info">jos@vandenoever.info</a>> wrote:</span><font color="#000000"><span style="line-height:normal;white-space:pre-wrap"><br></span></font></pre></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello all,<br>
<br>
I'm studying the Yesod book by Michael Snoyman and I'm slowly coming to grips<br>
with Haskell for the web.<br>
<br>
My current goal is to write an http(s) proxy that does filtering and caching.<br>
I've found a nice example by Snoyman on github:<br>
  <a href="https://gist.github.com/snoyberg/8779671" target="_blank">https://gist.github.com/<u></u>snoyberg/8779671</a><br>
<br>
This code does not compile with wai >= 3 because that does not have<br>
responseSourceBracket any more. What is the best way to replace it?<br>
<br>
---<br>
Wai.responseSourceBracket (HCl.responseOpen req2 man) (HCl.responseClose) $<br>
\res -> do<br>
        let body = mapOutput (Chunk . fromByteString) $ HCC.bodyReaderSource $<br>
HCl.responseBody res<br>
                headers = filter safeResHeader $ HCl.responseHeaders res<br>
        return (HCl.responseStatus res, headers, body)<br>
----<br>
<br>
Best regards,<br>
Jos van den Oever<br>
______________________________<u></u>_________________<br>
web-devel mailing list<br>
<a href="mailto:web-devel@haskell.org" target="_blank">web-devel@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/web-devel" target="_blank">http://mail.haskell.org/cgi-<u></u>bin/mailman/listinfo/web-devel</a><br>
</blockquote></div></div></div>