我正在尝试使用Pipes库对工作流进行建模。在该工作流程中,我想累积生产者的所有输出,然后将其传递。在这种情况下,我知道我的生产者会产生有限的输出。
所以,如果我有:
prod :: Producer a m ()
accum :: Pipe a [a] m r
groupConsumer :: Consumer [a] m r
如何为
accum
建模,以便可以执行以下操作:runEffect $ prod >-> accum >-> groupConsumer
谢谢!
最佳答案
您可以使用Pipes.Prelude.toListM
将Producer
收集到列表中:
Pipes.Prelude.toListM :: (Monad m) => Producer a m () -> m [a]
Pipes.Prelude.toListM prod :: (Monad m) => m [a]
然后,您只需将该列表提供给
groupConsumer
即可:runEffect $ (lift (Pipes.Prelude.toListM prod) >>= yield) >-> groupConsumer
关于haskell - 我可以制作一个使用所有生产者输出并将其作为列表传递的管道吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20948927/