在Storable和Unbox之间转换

时间:2013-05-30 18:58:39

标签: haskell unboxing storable

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

我最接近的是vector-th-unbox,但这只会创建一个无法使用的实例。

3 个答案:

答案 0 :(得分:2)

检查vector包。

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

答案 1 :(得分:0)

我可以想象从unbox到可存储的非常hacky方式,但它真的很hacky和低效!事实上,通过它,我实际上并不想写出来。这个概念是你可以用Unbox做的所有事情都可以在一个未装箱的矢量中使用它。因此,您可以使用单个元素初始化未装箱的矢量。给定所述元素,您可以创建一个持有它的向量,然后通过邪恶撬开您的Vector,并直接将这些字节用于您的可存储实例。你可以同样地走另一条路。

但我不知道你为什么要这样做。默认情况下,大多数可存储的数据类型也是Unbox,反之亦然。而对于那些他们不是那样的人来说,可以手动或使用工具来获得可存储就足够了。

答案 2 :(得分:0)

由于 vivian 已经回答,您可以使用C:\wamp\bin\apache\apache2.4.9\conf模块中提供的convert功能:http://hackage.haskell.org/package/vector/docs/Data-Vector-Generic.html#v:convert