我想使用https://hackage.haskell.org/package/safecopy-0.9.0.1/docs/Data-SafeCopy.html中的derivingSafeCopy来序列化我的数据类型以将它们存储在数据库中 - 这是因为我希望能够轻松地在数据库中迁移类型。
根据规格,如果我有类似的东西:
char*[]
putCopy A和putCopy B的输出将是相同的。我希望putCopy A和putCopy B会有所不同,因为我使用runGet来序列化A和B. safeGet,并希望A和B将序列化为不同的东西。为什么它以这种方式工作,如何以一种允许我轻松迁移数据类型的方式将A和B串行化为不同的东西?
答案 0 :(得分:1)
假设数据是用序列化类型标记的,正如您认为的那样。你会如何使用这些信息?即使可以在不指定类型的情况下反序列化值,您将如何使用结果值(毕竟你不知道它的类型)。
考虑制作这样的类型:
data C = TagA A | TagB B
现在,您可以将A
和B
值放入C
包装并序列化结果。当您反序列化类型C
的值时,您现在有一个标记(构造函数)来指示所包含值的类型。
免责声明:我从来没有机会使用这些库。