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类型,我发现了这篇非常有趣的文章,阐明了“一束流”的含义:。当然,这本书读得很好,信息量也很大。