Abstract types can be defined. Their syntax is inherited from Objective Caml and is reminded here.
type-definition | ::= | type typedef { and typedef } |
typedef | ::= | [ type-params ] typeconstr-name |
| | sum-type-def | |
| | record-type-def | |
sum-type-def | ::= | [ | ] one-sum-def { | one-sum-def } |
one-sum-def | ::= | capitalized-ident |
| | capitalized-ident of type | |
record-type-def | ::= | { label-type { ; label-type } } |
label-type | ::= | ident : type |
type-params | ::= | ’ ident |
| | ( ’ ident { , ’ ident } ) |