我正在尝试使用Pipes库来建模工作流程.在那个工作流程中,我想积累生产者的所有输出,然后传递它.在这种情况下,我知道我的制作人产生了有限的输出量.
所以,如果我有:
prod :: Producer a m ()
accum :: Pipe a [a] m r
groupConsumer :: Consumer [a] m r
Run Code Online (Sandbox Code Playgroud)
我如何建模accum以便我能做到:
runEffect $ prod >-> accum >-> groupConsumer
Run Code Online (Sandbox Code Playgroud)
谢谢!
您可以使用Pipes.Prelude.toListM收集Producer列表:
Pipes.Prelude.toListM :: (Monad m) => Producer a m () -> m [a]
Pipes.Prelude.toListM prod :: (Monad m) => m [a]
Run Code Online (Sandbox Code Playgroud)
然后你只需将该列表提供给您groupConsumer:
runEffect $ (lift (Pipes.Prelude.toListM prod) >>= yield) >-> groupConsumer
Run Code Online (Sandbox Code Playgroud)