Как определить тип данных для вложенных рекурсивных данных - PullRequest
0 голосов
/ 17 мая 2018

Я получил данные со стороны js, это выглядит так { "selectionSet": { "type": 1, "selections": [ { "name": { "kind": "Name", "value": "viewer" }, "selectionSet": { "type": 1, "selections": [ { "name": { "kind": "Name", "value": "avatarUrl" }, "selectionSet": null } ] } } ] } } Мне интересно, как определить типы для selectionSet и selections.

Кажется, что при определении selections,Я должен был определить selectionSet, потому что у него есть поле, тип которого selectionSet.Но когда определено selectionSet, я должен был определить selections

Может кто-нибудь ответить на это в стиле OCaml?Я хочу преобразовать эти данные в стиле JSON в запись.

1 Ответ

0 голосов
/ 17 мая 2018

Чтобы определить взаимно рекурсивные типы или функции, вы можете использовать ключевое слово and.В вашем случае ваши записи будут выглядеть примерно так:

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

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