2014-01-06 4 views
6

Ich versuche, die Pipes-Bibliothek zum Modellieren eines Workflows zu verwenden. In diesem Workflow möchte ich all diese Ausgaben von einem Produzenten akkumulieren und dann weiterleiten. In diesem Fall weiß ich, dass mein Produzent eine begrenzte Menge an Output produziert.Kann ich eine Pipe erstellen, die die gesamte Producer-Ausgabe verbraucht und sie als Liste weitergibt?

Also, wenn ich habe:

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

wie modelliere ich accum so dass ich tun kann:

runEffect $ prod >-> accum >-> groupConsumer 

Dank!

Antwort

6

können Sie Pipes.Prelude.toListM verwenden, um eine Producer in eine Liste zu sammeln:

Pipes.Prelude.toListM :: (Monad m) => Producer a m() -> m [a] 

Pipes.Prelude.toListM prod :: (Monad m) => m [a] 

Dann füttern Sie nur diese Liste Ihrer groupConsumer:

runEffect $ (lift (Pipes.Prelude.toListM prod) >>= yield) >-> groupConsumer 
+0

Perfect! Vielen Dank! – Tetigi

+0

Gern geschehen! –

Verwandte Themen