我有以下形式的数据类型:部分装箱矢量
data T = { a :: Int, b :: ComplexOtherDataType }
我能明显把这些成规则矢量从Data.Vector
模块。但是,当我访问a
组件时,我想要非常非常好的性能,所以额外的间接性是不理想的。我想要做的是让T
为Data.Vector.Unboxed.Unbox
的一个实例,但仍然有b
为懒惰。
的vector-th-unbox
提供制作Unbox
情况下,一个漂亮的模板哈斯克尔接口,但它不会在我的情况下工作。它要求为了使T
为Unbox
的实例,a
和b
也必须是实例。但我不想取消箱b
。我希望它被装箱/懒惰。
我的直觉说,为了克服这一障碍的最简单的方法是通过提供一种
newtype LazyUnbox a = LazyUnbox a
然后,我需要为LazyUnbox
将基本上只是存储拆箱载体内的指针提供Unbox
实例。我怎样才能做到这一点?还是有更好的方法?
“可存储”向量与“无箱”向量具有同样好的性能和严格性能,所以如果你可以让你的数据类型为'T'实现'可存储',那么你就很好。 –