Kinds
Kind
::= SimpleKind
| SimpleKind -> Kind
SimpleKind
::= * -- value type kind
| % -- region kind
| ! -- effect kind
| $ -- closure kind
| + -- witness kind
| ( Kind )
Types
Type
::= SimpleType
| forall TyVarKind+ . ConstrainedType
TyVarKind
::= TyVar
| ( TyVar :: Kind ) -- check this
ConstrainedType
::= SimpleType (:- Constraint ,Constraint*)?
| Context => SimpleType (:- Constraint ,Constraint*)?
| HsContext => SimpleType (:- Constraint ,Constraint*)?
Context
::= ClassConstraint =>ClassConstraint*
HsContext
::= ( ClassConstraint ,ClassConstraint* )
SimpleType
::=