如何为嵌套递归数据定义数据类型

时间:2018-05-17 03:17:12

标签: ocaml reason bucklescript

我从js那边得到了一个数据,它看起来像这样 { "selectionSet": { "type": 1, "selections": [ { "name": { "kind": "Name", "value": "viewer" }, "selectionSet": { "type": 1, "selections": [ { "name": { "kind": "Name", "value": "avatarUrl" }, "selectionSet": null } ] } } ] } } 我想知道如何为selectionSetselections定义类型。

似乎在定义selections时,我应该定义selectionSet,因为它有一个类型为selectionSet的字段。但是在定义selectionSet时,我应该定义selections

有人可以用OCaml风格回答吗?我想将此JSON样式数据转换为记录。

1 个答案:

答案 0 :(得分:3)

要定义mutualy递归类型或函数,可以使用关键字and。在您的情况下,您的记录看起来像这样:

type selectionSet = {
  t : t;
  selections : selections list;
}

and selections = {
  name : name;
  selectionSet : selectionSet option;
}