Это ответ на ваш комментарий Майклу E:
Варианты OCaml состоят из конструкторов с необязательными аргументами.В случае ответа Майкла, конструкторы: Empty
, T
, N
и Seq
.Empty
не принимает аргументов, T
принимает универсальный тип с именем 'term
, а N
принимает универсальный тип с именем 'nonterm
(через секунду я доберусь до Seq
).Вариант имеет тип ('nonterm, 'term) test
.Допустим, вам нужен список элементов типа ('nonterm, 'term) test
:
# [Empty; Empty];;
- : ('a, 'b) test list = [Empty; Empty]
Вы заметите, что типом является ('a, 'b) test list
.(OCaml заменил nonterm
на a
и term
на b
, но вам не нужно об этом слишком беспокоиться).
Теперь мы видим, что | Seq of ('nonterm, 'term) test list
является конструкторомс именем Seq
, который принимает список элементов типа ('nonterm, 'term) test
в качестве аргумента.Теперь мы можем сделать это:
# Seq [Empty;Empty];;
- : ('a, 'b) test = Seq [Empty; Empty]