我有以下 ADT 实现:
data FeatureValue =
FvInt Int
| FvFloat Float
| FvText Text
| FvBool Bool
deriving Show
data ApiResponse =
Online [[Maybe FeatureValue]]
| Offline [[[Maybe FeatureValue]]]
deriving Show
要编码的示例值可能是:
example :: ApiResponse
example =
Online [
[Just (FvInt 10), Nothing, Just (FvText "foo"), Just (FvFloat 1.42)],
[Nothing, Just (FvBool False), Just (FvText "bar"), Nothing]
]
这将导致以下 JSON:
[
[10, null, "foo", 1.42],
[null, false, "bar", null]
]
我特别在如何推导出ToJSON
实例上苦苦挣扎FeatureValue
。使用 Aeson 进行 ADT 编码的文档特别少(例如,其他很棒的 Aelve 指南,其中包含关于 ADT 编码/解码部分的光荣“摘要:TODO”)。