首先,我是一名新手,我仍然认为自己是Haskell的初学者。
我需要一个有效的双打三胞胎阵列。天真的方法是[(Double, Double, Double)]
,但这没有效果。我以为我可以使用repa,因为它应该是非常有效的。但是,我不知道应该如何定义三元组数组。
我可以做Array U DIM2 Double
并将三元组的元素存储在第二维中(即第一个索引是三元组的索引,第二个索引是三元组的元素)。然而,没有什么能够迫使第二个维度只有3号。
我需要Array U DIM1 Vec3D
之类的内容,但这是不可能的,因为Vec3D
不是Data.Vector.Unboxed.Base.Unbox
的实例。
答案 0 :(得分:3)
我可能会错误地阅读文档,但我认为Array U DIM1 (Double,Double,Double)
正是您想要的(为什么不尝试?)。在你告诉我它效率低之前:
据我所知,如果没有约束Array U sh u
和 Shape sh
,就无法引入Unbox u
。因此,任何Array U sh u
都必须高效且完全取消装箱。
在Unbox中注意到实例(Unbox a, Unbox b, Unbox c) => Unbox (a, b, c)
,因此Unbox (Double, Double, Double)
可以派生。