gpt4 book ai didi

Haskell ADT 与 aeson

转载 作者:行者123 更新时间:2023-12-02 18:36:09 28 4
gpt4 key购买 nike

我一直在与一个简单的 ADT 作斗争,试图让它来回往返 JSON,但无论我如何尝试修改或修改类型,我都没有运气。我错过了什么?

编译时,我总是遇到相同的运行时错误:

> let t = Fahrenheit
> fromJSON $ toJSON t
Error "when expecting a (), encountered Object instead"

尝试这个只会给我“什么也没有”,大概是因为同样的错误:解码$编码t

我尝试遵循这些来源,但无论我如何尝试,我似乎都无法解决此运行时错误: Haskell :: Aeson :: parse ADT based on field value https://www.fpcomplete.com/user/Geraldus/algebraic-data-types-adts-with-aeson

这是我正在使用的代码的一种形式。起初,我尝试将其用作嵌入到另一种类型中的类型,但当这不起作用时,我添加了“value”键以尝试使解析更容易(不走运)。

data TemperatureType = Celsius
| Fahrenheit
deriving (Show,Read,Typeable,Data,Eq)

-- This doesn't work either
-- $(deriveJSON defaultOptions ''TemperatureType)

instance ToJSON TemperatureType where
toJSON Fahrenheit = object [ "value" .= String "Fahrenheit" ]
toJSON Celsius = object [ "value" .= String "Celsius" ]

instance FromJSON TemperatureType where
parseJSON (Object x) = toTemperatureType <$> x .: "value"

toTemperatureType :: Text -> TemperatureType
toTemperatureType "Fahrenheit" = Fahrenheit
toTemperatureType "Celsius" = Celsius

最佳答案

Haskell 需要您帮助了解表达式结果的类型,因为在当前调用中无法推断它:

> fromJSON $ toJSON t :: Result TemperatureType

关于Haskell ADT 与 aeson,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28143342/

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