如何使用pipes-group实现流包中的fold和foldsM?
问题描述:
pipes-group库允许您在有效的流中分隔组,而无需随时在内存中保存整个组。从管的基团如何使用pipes-group实现流包中的fold和foldsM?
皱褶单子:: M =>(X - >一 - > X) - > X - >(X - > B) - >游离T(监制 上午)MR - >生产者BMR
foldsM ::单子米=>(X - >一 - > MX) - > MX - >(X - > mb)个 - >游离T (监制上午)mr - > Producer bmr
他们总结了e在一个分隔的流内分组并返回结果流。
的streamingalso supports delimited streams包,通过使用Stream
类型本身作为算符参数:
流(流(A)的M)MR
似乎没有直接存在但是folds
和foldsM
的类似物。 (折叠为未分割流do exist)。
如何实现这些功能与流机械?
答
看起来像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
产生摘要流。
注意:我还没有尝试过。