Haskell 在非固定向量中
我想在Data.Vector.Unbox.Unbox Vector中存储类似于任意类型的内容。我假设我应该为“a或b”创建一个Unbox实例,其中a和b是Unbox(暂时忽略孤立问题)。最好的方法是什么?我应该像(Bool,a,b)一样存储它吗?我更关心的是速度而不是空间。要在非固定结构中存储和类型,需要使用它们的乘积编码。例如,作为类型标记和值对的元组 因此:Haskell 在非固定向量中,haskell,unboxing,algebraic-data-types,Haskell,Unboxing,Algebraic Data Types,我想在Data.Vector.Unbox.Unbox Vector中存储类似于任意类型的内容。我假设我应该为“a或b”创建一个Unbox实例,其中a和b是Unbox(暂时忽略孤立问题)。最好的方法是什么?我应该像(Bool,a,b)一样存储它吗?我更关心的是速度而不是空间。要在非固定结构中存储和类型,需要使用它们的乘积编码。例如,作为类型标记和值对的元组 因此: 对于a和b的“空”插槽,有适当的默认值。一个选项是使用三个向量,一个布尔,一个a和一个b。当然,您的类型a和b必须有一些默认值。对,这
对于a和b的“空”插槽,有适当的默认值。一个选项是使用三个向量,一个布尔,一个a和一个b。当然,您的类型
a
和b
必须有一些默认值。对,这就是向量代码处理(Bool,a,b)的方式。有没有一种简单的方法可以获取Unbox实例的默认值?我不认为Unbox
需要默认值。要使代码通用,您可能需要引入自己的DefaultValue
type类来定义默认值。或者定义一个数据结构,如data EitherVector a b=(a,b,Vector(Bool,a,b))
。参见我的答案
Unbox a, Unbox b => Either a b
-->
Unbox (Int, a, b)