Data.Vector.Mixed的目的是什么?

6
在Edward Kmett的hybrid-vectors库中,有两个主要的模块:Data.Vector.HybridData.Vector.Mixed。前者的动机有一篇大文章进行了阐述。后者被提及但没有解释。我想弄清楚它的使用场景。到目前为止我已经注意到了两件事情:
  1. 有一个带有Typeable约束条件的Mixed类型类。我不理解haddocks中的解释,但看起来Typeable约束条件必须在某个时候用于恢复类型信息或安全转换。
  2. Vector数据类型仅针对底层的MVector参数化。这与Hybrid模块不同,后者是基于两个向量类型加上一个元组进行参数化的。
我会感激任何有用的见解或(更好的)使用案例的小例子。谢谢。

我以前从未使用过它,但我相信其目的只是提供适用于所有向量类型组合的操作。 - Gabriella Gonzalez
1
我觉得我开始理解了。像 headlengthindexM 这样的操作并没有什么用处,因为它们只接受一个向量作为参数(而且已经有针对所有其他向量类型工作的这些函数的版本)。但是对于 zipWith,它似乎有些有用,因为有两个向量参数。不,我仍然觉得我漏掉了什么。 - Andrew Thaddeus Martin
2
是的,我认为它适用于需要多个向量作为参数的事物。我猜其他操作纯粹是为了完整性(这样您就不必导入其他模块)。 - Gabriella Gonzalez
1个回答

1

据我的理解,Mixed类型类将使得类型安全的函数能够通过一个向量进行解析、合并和折叠,而不是通过并发进程同时解析每个向量,因此需要声明M.Vector g v M.Vector h m来在这些向量中找到一个单例点,然后使用for MVector do |Stream.length g v && Stream h m在每个向量中找到一个单例来与该键进行折叠key :: mergeStreamwith k d -> Stream k i -> Stream d i instance Singleton key where key = Vector.singleton[ v->(v-> MVector v m) -> MVector m] do transversewithkey g v => key.foldlwithkey g h


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接