为union数据类型定义可存储实例

时间:2011-12-08 21:44:44

标签: haskell vector storable

如何为下面的数据类型定义storable vector实例(由GHC基元类型组成):

data Atoms =  I GHC.Int.Int32|S GHC.Int.Int16 -- define a union data type

我检查过这个storable tutorial,但它仅适用于相同类型的矢量,而不适用于上面的联合。

1 个答案:

答案 0 :(得分:4)

你必须编码用于以某种方式实例化类型的构造函数。

例如,您可以添加一个字节,指定所使用的构造函数的索引。这意味着上面的值可以像这样存储:

Haskell    Binary
I 3     -> 00 00 00 00 03
S 4     -> 01 00 04 XX XX
              ^ Data
           ^ Constructor index
XX = unused byte

然后,当你想从字节字符串反序列化一个值时,你要查看第一个字节,查看它是哪个索引,然后根据它选择要使用的构造函数(以及接下来要查看的内容)。