Haskell管道:如何将bytestring写入文件

JS0*_*JS0 6 haskell haskell-pipes

我有以下代码应该为[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
Run Code Online (Sandbox Code Playgroud)

但是,没有输出(尽管文件被创建).如果我用"PBS.stdout"替换"PBS.toHandle fh",我得到输出(到stdout).

我也尝试使用SIO.withFile和我创建的整个管道作为参数

 SIO.withFile "output.bin" WriteMode $ \fh -> 
   runEffect $ input-processing >-> Pipes.for cat PB.encode >-> PBS.toHandle fh
Run Code Online (Sandbox Code Playgroud)

它的工作原理.但在这种情况下,我对如何将SIO.withFile放入具有上述签名的函数(仅返回使用者)中一无所知.

谢谢你解释我做错了什么.