如何为下面的数据类型定义storable vector实例(由GHC基元类型组成):
data Atoms = I GHC.Int.Int32|S GHC.Int.Int16 -- define a union data type
我检查过这个storable tutorial,但它仅适用于相同类型的矢量,而不适用于上面的联合。
答案 0 :(得分:4)
你必须编码用于以某种方式实例化类型的构造函数。
例如,您可以添加一个字节,指定所使用的构造函数的索引。这意味着上面的值可以像这样存储:
Haskell Binary
I 3 -> 00 00 00 00 03
S 4 -> 01 00 04 XX XX
^ Data
^ Constructor index
XX = unused byte
然后,当你想从字节字符串反序列化一个值时,你要查看第一个字节,查看它是哪个索引,然后根据它选择要使用的构造函数(以及接下来要查看的内容)。