在编译时检查了一系列三元组

时间:2016-06-29 11:13:47

标签: haskell repa

首先,我是一名新手,我仍然认为自己是Haskell的初学者。

我需要一个有效的双打三胞胎阵列。天真的方法是[(Double, Double, Double)],但这没有效果。我以为我可以使用repa,因为它应该是非常有效的。但是,我不知道应该如何定义三元组数组。

我可以做Array U DIM2 Double并将三元组的元素存储在第二维中(即第一个索引是三元组的索引,第二个索引是三元组的元素)。然而,没有什么能够迫使第二个维度只有3号。

我需要Array U DIM1 Vec3D之类的内容,但这是不可能的,因为Vec3D不是Data.Vector.Unboxed.Base.Unbox的实例。

1 个答案:

答案 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)可以派生。