Haskell 如何从管道组为流媒体包实现折叠和折叠DSM?
该库允许您在有效流中分隔组,而无需在任何时候将整个组保存在内存中 管道组中的两个有用功能是和: 折叠:单子m=>(x->a->x)->x->(x->b)->FreeT(制作人) a m)m r->Producer b m r foldsM::Monad m=>(x->a->m x)->m x->(x->m b)->FreeT (制作人a m)m r->制作人b m r 它们汇总分隔流中的每个组,并返回结果流 包,通过使用Haskell 如何从管道组为流媒体包实现折叠和折叠DSM?,haskell,streaming,Haskell,Streaming,该库允许您在有效流中分隔组,而无需在任何时候将整个组保存在内存中 管道组中的两个有用功能是和: 折叠:单子m=>(x->a->x)->x->(x->b)->FreeT(制作人) a m)m r->Producer b m r foldsM::Monad m=>(x->a->m x)->m x->(x->m b)->FreeT (制作人a m)m r->制作人b m r 它们汇总分隔流中的每个组,并返回结果流 包,通过使用流键入自身作为functor参数: 溪流(a的溪流)m r 然而,似乎不存在
流
键入自身作为functor参数:
溪流(a的溪流)m r
然而,似乎不存在与folds
和foldsM
的直接类似物。
(不分割溪流的褶皱)
如何用流媒体的机制实现这些功能?看起来像是
流媒体。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
以生成一系列摘要
注意:我尚未尝试此操作