类型的可序列化稳定表示

时间:2015-09-07 18:22:08

标签: haskell serialization types

我正在研究一个我想序列化的数据结构,使用的API如下:

serialize :: Foo a -> ByteString
deserialize :: ByteString -> Maybe (Foo a)

在我的情况下,a是一个幻像参数; <{1}}中没有值来见证该类型,但保留类型很重要。

GHC提供了Foo,它可以为我提供Typeable表单,我可以提取Fingerprint ,但我不认为表示在GHC的不同体系结构和版本中必然是稳定的

我是否可以通过某种方式可靠地序列化类型表示,可能使用新的静态指针或TypeRep中的其他内容?

编辑:我已在hashabler中实现了此类型版本控制功能(类似于“类型哈希”);见base

1 个答案:

答案 0 :(得分:3)

您可以像binary-typed套餐一样使用Typeable玩游戏。它允许您根据需要删除和重建指纹。我不确定这是否适用于动态制造的类型。另一种选择是自己制造一些标签,只要你知道或者可以弄清楚哪些值具有相同的幻像。一种极端的方法可能是构建您在此过程中看到的MapTypeRep,将它们映射到唯一的Int值。另一方面,您可以从标签中创建IntMap到正确包装值的函数。