type-definition | ::= | type typedef { and typedef } |
typedef | ::= | [type-params] typeconstr-name [type-information] |
type-information | ::= | [type-equation] [type-representation] { type-constraint } |
type-equation | ::= | = typexpr |
type-representation | ::= | = constr-decl { | constr-decl } |
∣ | = { field-decl { ; field-decl } } | |
type-params | ::= | type-param |
∣ | ( type-param { , type-param } ) | |
type-param | ::= | ' ident |
∣ | + ' ident | |
∣ | - ' ident | |
constr-decl | ::= | constr-name |
∣ | constr-name of typexpr | |
field-decl | ::= | field-name : poly-typexpr |
∣ | mutable field-name : poly-typexpr | |
type-constraint | ::= | constraint ' ident = typexpr |
exception-definition | ::= | exception constr-name [of typexpr] |
∣ | exception constr-name = constr |
exn
of exception values. The constructors are declared as
for a definition of a variant type.