我有一个生产者管道,我使用了打印管道。我想将输出写入文件。 如果我使用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转换为可以组合的管道。是否存在严格与懒惰的问题?
答案 0 :(得分:2)
解决方案很简单,编写一个fileSink函数,该函数附加到文件
fileSink = forever $ do
inp <- await
liftIO $ appendFile "testOutput" ('\n' : show inp )
return ()
使用文件句柄可能更有效,更实用,将文件名作为参数传递。使用管道真的很容易!