あなたは混乱しており、これを開梱するには少し時間がかかります。
あなたがIORef
Sを使用してIO
モナドの内部で作業しているときに、入力パラメータをこっそりする一般的な方法がありますが、私はのでことを伝えるつもりはない:それはないです
withResponse
の戻り値は、その3番目のパラメータが返す値なので何もしないでください。
Response BodyReader
をwithResponse
から外すと、それは閉じられ、あなたはそれを読むことができないので、助けにならないでしょう。
まず第一に、withResponse
の種類はこれです:
今
withResponse :: Request -> Manager -> (Response BodyReader -> IO a) -> IO a
、description of withResponse
はそれを明確Response BodyReader
オブジェクトがwithResponse
のアクション内部でのみ有効であることになります。したがって、あなたが要求しているようにそのオブジェクトをwithResponse
から取り出そうとすると、そのオブジェクトを読むことはできません。 Response BodyReader
オブジェクトは既にクローズされています。
代わりに、応答を使用して何かを実行し、その関数を渡す関数を作成する必要があります。
startOn url = do
man <- newManager defaultManagerSettings
req <- parseUrl url
read <- withResponse req man (brRead . responseBody)
return $ read
あなたに与えられたURLの最初のByteString
チャンクを返すことが、それはすべてあなたです場合:あなたがやりたいことを主張すべてが単一の時間応答で通話brRead
で、あなたがこれを行うことができますので、必要、それは大丈夫です。あなたがここでやろうとしていることは、応答の全体ByteString
を返す場合には、すでにそのための便利な機能があります - httpLbs
:
startOn url = do
man <- newManager defaultManagerSettings
req <- parseUrl url
response <- httpLbs req man
return $ responseBody response
は、あなたがより多くのコードを含めてもらえますか?この可能性が最も高い原因は不正なタイプのシグネチャですが、より多くのコードを確認することなく、問題の根源にあるシグネチャを確認することは困難です。 – Jules
それは役に立ちますか? – lamino
これはこの行の 'resp'です - これは' Response BodyReader'(これからいくつかの 'IO a'への関数)を処理する*アクション*であるはずですが、 *あなたは実際に 'content 'を作成しなければならない) - 例えば' content < - withResponse req man(\ resp - > return "What") 'はうまくいくはずだが、 'resonseOpen'か' withResponse'のどちらかが必要です - – Carsten