【发布时间】:2016-08-15 12:49:58
【问题描述】:
如何从文件流式传输到进程中?
Data.Conduit.Binary.sourceFile :: MonadResource m => FilePath -> Producer m ByteString
Data.Conduit.Process.sourceProcessWithStreams :: CreateProcess -> Producer IO ByteString -> Consumer ByteString IO a -> Consumer ByteString IO b -> IO (ExitCode, a, b)
唯一的MonadResource 是ResourceT,特别是IO 不是MonadResource。
我可以看到有sourceHandle,即IO,但如果可能的话,我宁愿不处理我自己的文件打开和关闭。另外,如果我在另一个空间中理解它,我想理解这个问题。
还有Data.Conduit.Lift.distribute:
distribute :: (Monad (t (ConduitM b o m)), Monad m, Monad (t m), MonadTrans t, MFunctor t) => ConduitM b o (t m) () -> t (ConduitM b o m) ()
所以我会得到类似的东西
distribute $ sourceFile "foo" :: ResourceT (ConduitM i ByteString IO) ()
但我不知道如何使用它。
【问题讨论】:
-
你在串流什么?以及到哪个过程?总的来说,你想做什么?
-
我修正了我的答案。
-
没有什么比使用
sourceHandle并自己关闭手柄那么简单了。ResourceT很好,但实际上只是为了方便。
标签: haskell monads monad-transformers conduit