编译时检查的 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)是可推导的。