typexpr | ::= | ' ident |
∣ | _ | |
∣ | ( typexpr ) | |
∣ | [[?]label-name:] typexpr -> typexpr | |
∣ | typexpr { * typexpr }+ | |
∣ | typeconstr | |
∣ | typexpr typeconstr | |
∣ | ( typexpr { , typexpr } ) typeconstr | |
∣ | typexpr as ' ident | |
∣ | variant-type | |
∣ | < [..] > | |
∣ | < method-type { ; method-type } [; ..] > | |
∣ | # class-path | |
∣ | typexpr # class-path | |
∣ | ( typexpr { , typexpr } ) # class-path | |
poly-typexpr | ::= | typexpr |
∣ | { ' ident }+ . typexpr | |
method-type | ::= | method-name : poly-typexpr |
Operator | Associativity |
Type constructor application | – |
* | – |
-> | right |
as | – |
variant-type | ::= | [ [ | ] tag-spec { | tag-spec } ] |
∣ | [> [ tag-spec ] { | tag-spec } ] | |
∣ | [< [ | ] tag-spec-full { | tag-spec-full } [ > { `tag-name }+ ] ] | |
tag-spec | ::= | `tag-name [ of typexpr ] |
∣ | typexpr |
tag-spec-full | ::= | `tag-name [ of typexpr ] { & typexpr } |
∣ | typexpr |