编译时检查的 repa 中的三元组数组
An array of triplets in repa checked at compile time
首先,我是 repa 的新手,总的来说我仍然认为自己是 Haskell 的初学者。
我需要一个有效的双打三胞胎数组。天真的方法是 [(Double, Double, Double)]
但这并不有效。我想我可以使用 repa,因为它应该非常有效。但是,我不知道应该如何定义一个三元组数组。
我可以 Array U DIM2 Double
并将三元组的元素存储在第二个维度中(即第一个索引是三元组的索引,第二个索引是三元组的元素)。但是,没有什么可以强制第二个维度的大小仅为 3。
我需要 Array U DIM1 Vec3D
之类的东西,但这是不可能的,因为 Vec3D
不是 Data.Vector.Unboxed.Base.Unbox
的实例。
我可能读错了文档,但我认为 Array U DIM1 (Double,Double,Double)
正是您想要的(您为什么不试试呢?)。在你告诉我它效率低下之前:
据我所知,没有约束 Shape sh
和 [=13] 是无法引入 Array U sh u
=].因此,任何 Array U sh u
都必然是高效且完全拆箱的。
在Unbox中注意实例(Unbox a, Unbox b, Unbox c) => Unbox (a, b, c)
,所以Unbox (Double, Double, Double)
是可推导的。
首先,我是 repa 的新手,总的来说我仍然认为自己是 Haskell 的初学者。
我需要一个有效的双打三胞胎数组。天真的方法是 [(Double, Double, Double)]
但这并不有效。我想我可以使用 repa,因为它应该非常有效。但是,我不知道应该如何定义一个三元组数组。
我可以 Array U DIM2 Double
并将三元组的元素存储在第二个维度中(即第一个索引是三元组的索引,第二个索引是三元组的元素)。但是,没有什么可以强制第二个维度的大小仅为 3。
我需要 Array U DIM1 Vec3D
之类的东西,但这是不可能的,因为 Vec3D
不是 Data.Vector.Unboxed.Base.Unbox
的实例。
我可能读错了文档,但我认为 Array U DIM1 (Double,Double,Double)
正是您想要的(您为什么不试试呢?)。在你告诉我它效率低下之前:
据我所知,没有约束
Shape sh
和 [=13] 是无法引入Array U sh u
=].因此,任何Array U sh u
都必然是高效且完全拆箱的。在Unbox中注意实例
(Unbox a, Unbox b, Unbox c) => Unbox (a, b, c)
,所以Unbox (Double, Double, Double)
是可推导的。