由于这个问题的答案,我希望能够从 Data.Vector.Unboxed.Unbox 的实例构造Foreign.Storable.Storable的实例(反之亦然)。这可能吗?
我知道的最接近的是vector-th-unbox,但这只会创建一个不可装箱的实例。
由于这个问题的答案,我希望能够从 Data.Vector.Unboxed.Unbox 的实例构造Foreign.Storable.Storable的实例(反之亦然)。这可能吗?
我知道的最接近的是vector-th-unbox,但这只会创建一个不可装箱的实例。
检查vector
包裹。
使用Data.Vector.convert :: (Vector v a, Vector w a) => v a -> w a
.
正如vivian已经回答的那样,您可以使用模块convert
中提供的功能: http ://hackage.haskell.org/package/vector/docs/Data-Vector-Generic.html#v:convertData.Vector.Generic
我可以想象从 unbox 到 storable 的一种非常骇人听闻的方式,但它确实是 hacky 且效率低下!事实上,经过它的工作,我真的不想把它写出来。这个概念是,你可以用 Unbox 做的就是在一个未装箱的向量中使用它。因此,您可以使用单例元素初始化未装箱的向量。给定所述元素,您可以创建一个包含它的向量,然后通过邪恶撬开您的向量,并将字节直接用于您的 Storable 实例。你同样可以邪恶地走另一条路。
但我不知道你为什么要这样做。大多数默认可存储的数据类型也是 Unbox ,反之亦然。对于那些他们不是,派生 Storable 很容易——无论是手动还是使用工具。