2017-08-19 29 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產生摘要流。

注意:我還沒有嘗試過。

相關問題