【发布时间】:2015-06-01 08:08:42
【问题描述】:
假设我在 Haskell Pipes 中有两个 Proxy。它们代表外部系统进程。
produce :: MonadIO m => Producer ByteString m ExitCode
consume :: MonadIO m => Consumer ByteString m ExitCode
所以我将它们连接到Effect,如下所示:
effect :: Effect m ExitCode
effect = produce >-> consume
这个Effect 将从第一个终止的Proxy 中给我ExitCode。通常这将是produce,而不是consume。获取consume 的返回值的惯用管道方式是什么,即使它没有首先终止?
到目前为止,我认为如果不执行某种 icky 带内信令,这是不可能的,因此consume 知道流已完成。最后一个代理知道关闭的唯一方法是从await 获取一些东西,所以我可以向它发送一个空的ByteString 来表示流已完成。只是感觉不对劲。我现在拥有的是一个单独的 MVar,它可以提供退出值,但我认为必须有一种更惯用的方式来做到这一点。
【问题讨论】:
标签: haskell haskell-pipes