Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 在非固定向量中_Haskell_Unboxing_Algebraic Data Types - Fatal编程技术网

Haskell 在非固定向量中

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必须有一些默认值。对,这

我想在Data.Vector.Unbox.Unbox Vector中存储类似于任意类型的内容。我假设我应该为“a或b”创建一个Unbox实例,其中a和b是Unbox(暂时忽略孤立问题)。最好的方法是什么?我应该像(Bool,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)