我正在尝试使用Pipes库对工作流进行建模。在该工作流程中,我想累积生产者的所有输出,然后将其传递。在这种情况下,我知道我的生产者会产生有限的输出。

所以,如果我有:

prod :: Producer a m ()
accum :: Pipe a [a] m r
groupConsumer :: Consumer [a] m r

如何为accum建模,以便可以执行以下操作:
runEffect $ prod >-> accum >-> groupConsumer

谢谢!

最佳答案

您可以使用Pipes.Prelude.toListMProducer收集到列表中:

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/

10-10 16:26