gpt4 book ai didi

haskell - Aeson 的 derivedJSON 不能按预期对枚举工作

转载 作者:行者123 更新时间:2023-12-04 00:41:40 35 4
gpt4 key购买 nike

我通常自己写ToJSONFromJSON实例,但我决定使用 deriveJSON对于一个类型,因为它是如此简单:

data Priority = HIGH | MEDIUM | LOW deriving Show
$(deriveToJSON id ''Priority)

main = BS.putStrLn . encode $ HIGH

我会期待 JSON推导仅将枚举写为字符串。相反,它是哈希的关键! {"HIGH":[]}
为什么这是默认行为?

最佳答案

这是因为aeson不区分总和类型,如您的 Priority和更复杂的类型,如 data PriorityAndDetails = HIGH { highReason :: Text, alertType :: Alert } | MEDIUM { personResponsible :: Person } | LOW .从根本上说,这些类型中的每一个都是“只是一个带有 n 个参数的数据构造函数”。

Priority HIGH , MED , 和 LOW每个都是零参数的数据构造函数。在 PriorityAndDetails HIGH , MED , 和 LOW每个都只是具有一定数量的命名参数的数据构造函数,分别为 2、1 和 0。

一般来说,我发现您可能需要创建自己的 ToJSONFromJSON除了早期原型(prototype)之外的任何事情的实例。

关于haskell - Aeson 的 derivedJSON 不能按预期对枚举工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18117029/

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