Haskell 我可以使用向量库的Bundle模块吗?
简单问题:我可以使用Haskell 我可以使用向量库的Bundle模块吗?,haskell,vector,Haskell,Vector,简单问题:我可以使用Data.Vector.Fusion.Bundle下的API吗?它被认为是公开和稳定的吗?如果是:是否有更多信息可供使用 例如,在树中写入收集操作,其中数据存储在树叶中的向量中: data Tree a = Empty | Node a (Tree a) (Tree a) | Leaf a toBundle Empty = B.empty toBundle (Leaf x) = B.singleton x toBundle (Node x l r) =
Data.Vector.Fusion.Bundle
下的API吗?它被认为是公开和稳定的吗?如果是:是否有更多信息可供使用
例如,在树中写入收集操作,其中数据存储在树叶中的向量中:
data Tree a = Empty | Node a (Tree a) (Tree a) | Leaf a
toBundle Empty = B.empty
toBundle (Leaf x) = B.singleton x
toBundle (Node x l r) = toBundle l B.++ B.singleton x B.++ toBundle r
toVector t = V.unfoldrN s (\b -> Just (B.head b, B.tail b)) b
where b = toBundle t
(Just s) = B.upperBound (B.size b)
(树叶里没有向量……想象一下:))
当我写这篇文章时,我发现没有
Bundle va->va
函数将Bundle转换回向量。。。我遗漏了什么吗?我认为您需要的是函数:unstream::Vector va=>Bundle va->va
,它在data.Vector.generic.(新)模块中实现。
参考您的toVector
code示例,我建议您避免依赖为手动构建的流/包提供的大小提示,而是使用(可能)更有效的方法来构建向量,例如使用函数:generateM::Monad m=>Int->(Int->ma)->m(vector a)
此外,从纯概念的角度来看,我想知道现在的
叶a
是否基本上等同于节点a空
,因此可能是多余的?这是怎么回事:键入Leaf a=Node a Empty
?我认为唯一的文档在引用的论文中。不幸的是,你可能会发现很难找到完全理解这部分代码的人。有没有理由不为你想象的用例使用流
基础设施?它比新的捆绑
材料旧得多(因此更稳定),并且被普遍理解,例如文本
和流融合
中的相应材料将显示出来。老实说,我还没有看过流
界面。Bundle
是我最先找到的。因此,从更近的角度来看,Bundle
接口实际上是2012年刚刚重命名为Bundle
的Stream
接口。事实上,详细查看Bundle类型,我发现了这篇非常有趣的文章,阐明了“一束流”的含义:。当然,这本书读得很好,信息量也很大。