我正在研究一个我想序列化的数据结构,使用的API如下:
serialize :: Foo a -> ByteString
deserialize :: ByteString -> Maybe (Foo a)
在我的情况下,a
是一个幻像参数; <{1}}中没有值来见证该类型,但保留类型很重要。
GHC提供了Foo
,它可以为我提供Typeable
表单,我可以提取Fingerprint
,但我不认为表示在GHC的不同体系结构和版本中必然是稳定的
我是否可以通过某种方式可靠地序列化类型表示,可能使用新的静态指针或TypeRep
中的其他内容?
编辑:我已在hashabler中实现了此类型版本控制功能(类似于“类型哈希”);见base
。
答案 0 :(得分:3)
您可以像binary-typed套餐一样使用Typeable
玩游戏。它允许您根据需要删除和重建指纹。我不确定这是否适用于动态制造的类型。另一种选择是自己制造一些标签,只要你知道或者可以弄清楚哪些值具有相同的幻像。一种极端的方法可能是构建您在此过程中看到的Map
个TypeRep
,将它们映射到唯一的Int
值。另一方面,您可以从标签中创建IntMap
到正确包装值的函数。