pipes-group库允许您在有效流中划分组,而无需随时在内存中保存整个组。
folds :: Monad m => (x - > a - > x) - > x - > (x - > b) - > FreeT(制片人 a m)m r - >制片人b m r
foldsM :: Monad m => (x - > - a - > m x) - > m x - > (x - > m b) - >游离T% (制片人a m)m r - >制片人b m r
他们在分隔的流中汇总每个组并返回结果流。
streaming包also supports delimited streams,使用Stream
类型本身作为仿函数参数:
流(流(Of a)m)m r
尽管似乎没有folds
和foldsM
的直接类似物。
(折叠为未划分的溪流do exist)。
如何使用流媒体的机制实现这些功能?
答案 0 :(得分:2)
看起来Streaming.mapped
是关键工具。
mapped :: (Monad m, Functor f)
=> (forall x. f x -> m (g x))
-> Stream f m r
-> Stream g m r
mapped :: (Monad m, Functor f)
=> (forall x. Stream f m x -> m (g x))
-> Stream (Stream f m) m r
-> Stream g m r
mapped :: Monad m
=> (forall x. Stream (Of a) m x -> m (Of b x))
-> Stream (Stream (Of a) m) m r
-> Stream (Of b) m r
我们还提供相关的折叠,
fold :: Monad m
=> (x -> a -> x) -> x -> (x -> b)
-> Stream (Of a) m r -> m (Of b r)
foldM :: Monad m
=> (x -> a -> m x) -> m x -> (x -> m b)
-> Stream (Of a) m r -> m (Of b r)
因此,您应该可以将mapped
应用于部分应用的fold
或foldM
,以生成摘要流。
警告:我还没有尝试过这个。