recursion, lists, and higher order functions, OCaml's type inference system.