我可以创建一个消耗所有生产者输出的管道并将其作为列表传递吗?

时间:2014-01-06 11:21:15

标签: haskell

我正在尝试使用Pipes库来建模工作流程。在那个工作流程中,我想积累生产者的所有输出,然后传递它。在这种情况下,我知道我的制作人产生了有限的输出量。

所以,如果我有:

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

如何对accum进行建模,以便我可以这样做:

runEffect $ prod >-> accum >-> groupConsumer

谢谢!

1 个答案:

答案 0 :(得分:6)

您可以使用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