Function types describe the types of arguments and return value of a function. The type of an argument can be a type variable, in which case we call the function polymorphic.
Currying means rewriting a function of more than one argument to a sequence of functions, each with a single argument.
Type classes allow to impose restrictions on polymorphic type variables. Type classes express that e.g. a type represents a number, or something that can be ordered.
Type inference is the analysis of code in order to infer its type. It works using type inference rules that generate typings based on the program text.
© University of Glasgow