Types

type : typeNoVoid | voidType
typeNoVoid : namedType | genericType | nullType | arrayType
| lambdaType | tupleType | wildcardType | infixType
| prefixType | postfixType
types : type { comma type }?
namedType : identifierList
genericType : namedType '<' types? '>'

Basic Types

nullType : 'null'
voidType : '(' ')'
wildcardType : '_'

Collection Types

mutability : 'var' | 'final'
tupleType : '(' types ')'
arrayType : '[' mutability? type? ']'
| type '[' ']' # Java-Style, causes warning
mapType : '[' mutability? type ':' type ']'

Compound Types

lambdaType : '=>' type
| typeNoVoid '=>' type
| '(' types? ')' '=>' type
| type '.' '(' types? ')' '=>' type
infixType : type identifier type
prefixType : identifier type
postfixType : type identifier