type ('nonterminal, 'terminal) pe_tree =
| Is_empty
| Leaf of t
| Node of (n * tree)
| Sequence of list
| Repeat of list
| Is_not of e;;
Вы используете *
для определения типов продуктов, как в 'a * 'b
. Хотя, вероятно, не так уж важно сейчас, вы должны знать, что Node of 'a * 'b
и Node of ('a * 'b)
различны. Вы можете рассматривать их как тип варианта с двумя параметрами, а другой тип варианта с одним параметром (кортежом) соответственно.
Есть еще несколько вещей,
- вам нужно определить, что
Sequence
и Repeat
являются списком.
'nonterminal
и 'terminal
не используются; если они не предназначены для фантомных типов, в которых я сомневаюсь, их, вероятно, следует использовать в части подписи.