Add support for higher-rank polymorphism
This merge request adds support for higher-rank polymorphism to the parser. Furthermore a new language extension RankNTypes
is introduced. The representation of AbstractCurry is also adapted to support higher-rank polymorphism.
The recognized syntax of Curry will change as follows (only the relevant parts are listed):
\begin{aligned}
\cdots
\end{aligned}
\begin{aligned}
\textit{ConstrDecl} &::=\dots\\
&\phantom{::}\mid\phantom{!)}\textit{AppTypeExpr}~\textit{ConOp}~\textit{AppTypeExpr}\\
&\phantom{::}\mid\phantom{!)}\dots\\
\textit{ForallVarID} &::=\textit{Ident}\\
\textit{ForallVars} &::=\texttt{forall}~\textit{ForallVarID}_{1}\ldots\textit{ForallVarID}_{n}~\texttt{.} &&(n\geq 1)\\
\textit{TypeExpr} &::=\{\textit{ForallVars}\}~[\textit{Context}~\texttt{=>}]~\textit{FuncTypeExpr}\\
\textit{FuncTypeExpr} &::=\textit{AppTypeExpr}~[\texttt{->}~\textit{TypeExpr}]\\
\textit{AppTypeExpr} &::=[\textit{AppTypeExpr}]~\textit{SimpleTypeExpr}\\
\textit{Signature} &::=\textit{Functions}~\texttt{::}~\textit{TypeExpr}\\
\textit{Expr} &::=\textit{InfixExpr}~\texttt{::}~\textit{TypeExpr}\\
&\phantom{::}\mid\phantom{=}\dots
\end{aligned}
\begin{aligned}
\cdots
\end{aligned}
\begin{aligned}
\textit{QualTypeExpr} &::=\dots &&(\text{removed})\\
\textit{TypeAppExpr} &::=\dots &&(\text{removed})
\end{aligned}
\begin{aligned}
\cdots
\end{aligned}
Edited by Jan-Hendrik Matthes