Haskell:为什么derivingSafeCopy只依赖于传递给构造函数的类型?

时间:2016-02-17 23:21:15

标签: haskell serialization database-migration

我想使用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串行化为不同的东西?

1 个答案:

答案 0 :(得分:1)

假设数据是用序列化类型标记的,正如您认为的那样。你会如何使用这些信息?即使可以在不指定类型的情况下反序列化值,您将如何使用结果值(毕竟你不知道它的类型)。

考虑制作这样的类型:

data C = TagA A | TagB B

现在,您可以将AB值放入C 包装并序列化结果。当您反序列化类型C的值时,您现在有一个标记(构造函数)来指示所包含值的类型。

免责声明:我从来没有机会使用这些库。