【发布时间】:2014-03-03 18:05:09
【问题描述】:
代数数据类型是准确描述数据的便捷方式。 JSON 中的产品类型没有问题。但是不清楚 sum-type 可以是什么,那么如何在 JSON 中表示变体类型?
【问题讨论】:
标签: json functional-programming variant
代数数据类型是准确描述数据的便捷方式。 JSON 中的产品类型没有问题。但是不清楚 sum-type 可以是什么,那么如何在 JSON 中表示变体类型?
【问题讨论】:
标签: json functional-programming variant
以下面的变体类型为例。
data Tree = Empty
| Leaf Int
| Node Tree Tree
在 JSON 中可以使用以下三种形式来指定三种变体。
Variant | JSON
--------+---------------
Empty | null
--------+---------------
Leaf | {
| "leaf": 7
| }
--------+---------------
Node | {
| "node": [
| <tree>,
| <tree>
| ]
| }
基本上,使用带有单个键值对的 JSON 对象,其中键是选定的变体。
【讨论】:
Leaf -> 和这些部分是 JSON 的 part。但在编辑之后,它看起来更像是一个两列布局(您可能想更进一步明确这一点)。
也许使用带有value 和tag 属性的对象表示法?例如:
{
"someVariant": {
"value": 25,
"tag": "currentFormOfTheVariant"
}
}
对象和特殊格式的字符串基本上是 JSON 中自描述数据类型的唯一真正选择。
【讨论】: