Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell:为什么derivingSafeCopy只依赖于传递给构造函数的类型?_Haskell_Serialization_Database Migration - Fatal编程技术网

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

Haskell:为什么derivingSafeCopy只依赖于传递给构造函数的类型?,haskell,serialization,database-migration,Haskell,Serialization,Database Migration,我想使用derivingSafeCopy from来序列化数据类型以将它们存储在数据库中——这是因为我希望能够轻松地迁移数据库中的类型 根据规格,如果我有类似的东西: data A = A data B = B deriveSafeCopy 1 'base ''A deriveSafeCopy 1 'base ''B putCopy A和putCopy B的输出将相同。我希望putCopy A和putCopy B会有所不同,因为我正在使用runGet序列化A和B。safeGet,并且希望A和B

我想使用derivingSafeCopy from来序列化数据类型以将它们存储在数据库中——这是因为我希望能够轻松地迁移数据库中的类型

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

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

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

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

考虑制作如下类型:

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

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