我想使用 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
现在,您可以将A
和B
值放入C
包装器中并序列化结果。当您反序列化类型 C
的值时,您现在有一个标记(构造函数)来指示所包含值的类型。
免责声明:我从来没有机会使用这些库。