0

プロデューサー パイプがあり、プリント パイプを使用しました。出力をファイルに書き込みたいと思います。Control.Data.sinkFile を使用すると、

test2file = runPipe $ CB.sinkFile "testOutput" <+< traverseTree fn3 

タイプエラーが発生します:

Couldn't match expected type `Pipe
                                b0 void-0.5.8:Data.Void.Void m0 r0'
            with actual type `Data.Conduit.Internal.Pipe
                                l0 Data.ByteString.Internal.ByteString o0 r1 m1 r1'
In the return type of a call of `sinkFile'
In the first argument of `(<+<)', namely `sinkFile "testOutput"'

sinkFile を構成可能なパイプに変換するにはどうすればよいですか。Strict vs. Lazy の質問はありますか?

4

1 に答える 1

2

ソリューションは簡単で、ファイルに追加する fileSink 関数を記述します

fileSink = forever $ do 
inp <- await
liftIO $ appendFile "testOutput" ('\n' : show inp )
return () 

ファイル ハンドルを使用する方が効率的であり、ファイル名を引数として渡す方がより実用的です。パイプを使うのは本当に簡単です!

于 2012-09-29T14:27:52.443 に答える