4

由于这个问题的答案,我希望能够从 Data.Vector.Unboxed.Unbox 的实例构造Foreign.Storable.Storable实例(反之亦然)。这可能吗?

我知道的最接近的是vector-th-unbox,但这只会创建一个不可装箱的实例。

4

3 回答 3

4

检查vector包裹。

使用Data.Vector.convert :: (Vector v a, Vector w a) => v a -> w a.

于 2013-05-31T04:23:02.290 回答
1

正如vivian已经回答的那样,您可以使用模块convert中提供的功能: http ://hackage.haskell.org/package/vector/docs/Data-Vector-Generic.html#v:convertData.Vector.Generic

于 2015-07-10T11:24:06.143 回答
0

我可以想象从 unbox 到 storable 的一种非常骇人听闻的方式,但它确实是 hacky 且效率低下!事实上,经过它的工作,我真的不想把它写出来。这个概念是,你可以用 Unbox 做的就是在一个未装箱的向量中使用它。因此,您可以使用单例元素初始化未装箱的向量。给定所述元素,您可以创建一个包含它的向量,然后通过邪恶撬开您的向量,并将字节直接用于您的 Storable 实例。你同样可以邪恶地走另一条路。

但我不知道你为什么要这样做。大多数默认可存储的数据类型也是 Unbox ,反之亦然。对于那些他们不是,派生 Storable 很容易——无论是手动还是使用工具。

于 2013-05-30T21:54:08.777 回答