gpt4 book ai didi

haskell - 反序列化存在的数据类型

转载 作者:行者123 更新时间:2023-12-02 02:51:58 25 4
gpt4 key购买 nike

我需要写一个 Serialize 以下数据类型的实例:

data AnyNode = forall n . (Typeable n, Serialize n) => AnyNode n

序列化这个没问题,但是我无法实现反序列化,因为编译器无法解析 Serialize n的具体实例, 自 n与外部作用域隔离。

a related discussion in 2006 .我现在想知道今天是否有任何解决方案或解决方法。

最佳答案

您只需在序列化时标记类型,并在反序列化时使用字典取消标记类型。这是一些省略错误检查等的伪代码:

serialAnyNode (AnyNode x) = serialize (typeOf n, serialize x)

deserialAnyNode s = case deserialize s of
(typ,bs) -> case typ of
"String" -> AnyNode (deserialize bs :: String)
"Int" -> AnyNode (deserialize bs :: Int)
....

请注意,您只能使用您的函数反序列化封闭的类型域。通过一些额外的工作,您还可以反序列化派生类型,如元组、maybes 和 anothers。

但是,如果我要声明一个全新类型的“陷阱”派生 TypeableSerialize , deserialAnyNode没有扩展当然不能处理它。

关于haskell - 反序列化存在的数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18039005/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com