ばかげたやり方かもしれませんが、これで終わりです。HTTP リクエストの送受信をレスポンスの処理から分離したかったのです。
import Pipes
import qualified Pipes.HTTP as HTTP
import Pipes.Core
import qualified Pipes.ByteString as PB
import Network.Socket (withSocketsDo)
fetch m url = do
req <- lift $ HTTP.parseUrl url
resp <- lift $ HTTP.withHTTP req m return
url' <- respond $ HTTP.responseBody resp
fetch m url'
client :: Client String (Producer PB.ByteString IO ()) IO ()
client = do
b <- request "http://www.google.com"
lift $ runEffect $ b >-> PB.stdout
main = withSocketsDo $ HTTP.withManager HTTP.tlsManagerSettings $ \m ->
runEffect $ fetch m +>> client
正当なようです。しかし、応答の一部が出力され、「Network.Socket.ByteString.recv: failed (Unknown error)」が表示されます。他に何をする必要がありますか?