5
コンジットパッケージを試しています。また、ネットワーク・コンジットパッケージを見つけたが、私はソケットにファイルの内容を送信し、単純なTCPクライアントを作ってみました:コンジットとネットワークコンジット:MonadResourceとIOを組み合わせる
import Data.Conduit
import Data.Conduit.Binary
import Data.Conduit.Network
import Data.ByteString.Char8 (pack)
sendFile fileName appData = runResourceT $
sourceFile fileName $$ appSink appData
main = runTCPClient (clientSettings 8000 (pack "localhost")) (sendFile "book.tex")
アプリシンクは住んでいないので、これは、しかし、動作しません。 ResourceT:
[1 of 1] Compiling Main (Conduit2.hs, interpreted)
Conduit2.hs:9:63:
Occurs check: cannot construct the infinite type: m0 = ResourceT m0
Expected type: Application (ResourceT m0)
Actual type: AppData (ResourceT m0) -> m0()
In the return type of a call of `sendFile'
In the second argument of `runTCPClient', namely
`(sendFile "book.tex")'
Failed, modules loaded: none.
runResourceTないとは、しかし、それは明らかにどちらか動作しないことができます。
[1 of 1] Compiling Main (Conduit2.hs, interpreted)
Conduit2.hs:9:63:
No instance for (MonadResource IO)
arising from a use of `sendFile'
...etc...
私の推測では、私はせずにResourceTにappSink(M = IO)をラップするべきであるということです実際にリソースを管理しています。しかし、私はちょうどそれを行う方法を理解することはできません。
...?
あなたが理解したので、正しい答えを受け入れる必要があります。このようにして、SOの検索で受け入れられた答えが表示されます。 – Davorak