2017-08-19 28 views
2

pipes-group库允许您在有效的流中分隔组,而无需随时在内存中保存整个组。从管的基团如何使用pipes-group实现流包中的fold和foldsM?

两个有用的功能是foldsfoldsM

皱褶单子:: 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

似乎没有直接存在但是foldsfoldsM的类似物。 (折叠为未分割流do exist)。

如何实现这些功能与机械?

回答

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到部分应用foldfoldM产生摘要流。

注意:我还没有尝试过。

相关问题