У меня есть следующий код, который должен создать конвейер 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 в функцию с вышеуказанной подписью (возвращая только потребителя).
Спасибо за объяснение того, что я делаю неправильно.