Haskell:为什么派生SafeCopy只依赖于传递给构造函数的类型



我想使用 derivingSafeCopy from https://hackage.haskell.org/package/safecopy-0.9.0.1/docs/Data-SafeCopy.html 来序列化我的数据类型以将它们存储在数据库中 - 这是因为我希望能够轻松地迁移数据库中的类型。

根据规格,如果我有类似的东西:

data A = A
data B = B
deriveSafeCopy 1 'base ''A
deriveSafeCopy 1 'base ''B

放置复制 A 和放置副本 B 的输出将相同。我希望 putCopy A 和 putCopy B 会有所不同,因为我使用 runGet 序列化 A 和 B。safeGet,并希望 A 和 B 将序列化为不同的东西。为什么它以这种方式工作,我怎样才能让 A 和 B 以一种允许我轻松迁移数据类型的方式序列化到不同的东西?

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

考虑创建这样的类型:

data C = TagA A | TagB B

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

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

最新更新