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