Haskell管道:如何将字节字符串写入文件

时间:2018-12-11 12:26:04

标签: 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

但是,没有输出(尽管文件已创建)。如果将“ 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放入具有上述签名的函数中(仅返回使用者)。

感谢您对我在做什么的解释。

0 个答案:

没有答案