我有以下代码应为[Word8]创建管道使用者,并将其输出到文件中。
import Pipes
import qualified Pipes.Binary as PB
import qualified Pipes.ByteString as PBS
import qualified System.IO as SIO
save :: String -> Consumer [Word8] IO ()
save filename = do
fh <- lift $ SIO.openFile filename WriteMode
_ <- Pipes.for cat PB.encode >-> PBS.toHandle fh
lift $ SIO.hClose fh
但是,没有输出(尽管文件已创建)。如果将“ PBS.toHandle fh”替换为“ PBS.stdout”,我将获得输出(至stdout)。
我还尝试将SIO.withFile与我创建的整个管道一起用作参数,例如
SIO.withFile "output.bin" WriteMode $ \fh ->
runEffect $ input-processing >-> Pipes.for cat PB.encode >-> PBS.toHandle fh
,并且有效。但是在那种情况下,我不知道如何将SIO.withFile放入具有上述签名的函数中(仅返回使用者)。
感谢您对我在做什么的解释。