| cons: A -> list A -> list A.
(* The type notation list A is the type of all lists with elements of type A: it is
-defined by tow constructors: a polymorphic empty list (nil A) and a cons operation,
+defined by two constructors: a polymorphic empty list (nil A) and a cons operation,
adding a new head element of type A to a previous list. For instance, (list nat) and
and (list bool) are lists of natural numbers and booleans, respectively. But we can
-also form more complex data typea, like (list (list (nat → nat))), that is a list whose
-elements are lists of functions from natural number to natural numbers.
+also form more complex data types, like (list (list (nat → nat))), that is a list whose
+elements are lists of functions from natural numbers to natural numbers.
Typical elements in (list bool) are for instance,
nil nat - the empty list of type nat