Трубы на Haskell: как записать строку в файл - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть следующий код, который должен создать конвейер Consumer для [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», я получу вывод (на стандартный вывод).

Я также пытался использовать SIO.withFile со всем конвейером, который я создаю в качестве аргумента, например

 SIO.withFile "output.bin" WriteMode $ \fh -> 
   runEffect $ input-processing >-> Pipes.for cat PB.encode >-> PBS.toHandle fh

, и это работает.Но в этом случае я не знаю, как поместить SIO.withFile в функцию с вышеуказанной подписью (возвращая только потребителя).

Спасибо за объяснение того, что я делаю неправильно.

...