15-312 Foundations of Programming Languages
Lecture 11: Parametric Polymorphism
After tying together static and dynamic semantics in the form
of the type preservation and progress theorems, we have spent a few
lectures enriching our basic computational mechanisms by introducing
exceptions and continuations. In the next few lectures we return
to the basic questions behind types and investigate extensions to the
type system that are, to a large degree, independent of the
underlying computational mechanisms.
The first of these will be polymorphism or, more specifically,
parametric polymorphism. This allows a given expression to work at more
than one type---in fact, at an infinite family of related types.
We present two different formulations of parametric polymorphism:
one where programs explicit abstract over types, and one where
types are left implicit. Standard ML adopts a restricted form
of the latter; we will take the first as a more robust formulation
for most of the remainder of the course.