-The nature of the type checking algorithm already included type checking and
-inferring the type of higher order functions. Since we allow constants there is
-a difference between \SI{read} and \SI{read()}. To make this difference we
-introduced a separate type of expression called a \SI{FuncType}, this type
-encodes a function with arity $0$.
+As extension this compiler can handle function types. Function types are
+pointers to functions that may or may not have arguments already curried in. We
+use the simple approach instead of the full fledged closure approach because of
+time reasons. Adding the functionality in the lexer and parser was trivial
+because of the modular nature. There was one small distinction that we had to
+make which was the difference between a $0$-arity function call and a $0$-arity
+function pointer. Currently \SI{read} is parsed as a function pointer and
+\SI{read()} is parsed as a function call. Adding the functionality in the
+semantic analysis was actually done from the start since the
+\emph{Hindley-Milner} algorithm already supported it.