• Originally designed as a language to build a theorem prover by Robin Milner • Strong, static typing • Enables powerful type inference via the Hindley-Milner algorithm • We’ll focus on those last two pieces in modern implementations • Code samples will be in OCaml
allow a machine to understand and enforce a type used in a function without the programmer actually declaring a type signature • Allows the compiler to enforce types by checking all usages of functions and their type signatures before runtime
Given all the information at hand, the computer cannot tell exactly what type is required, therefore it must work for any type a’ and return any type b’