In this lecture we discuss bidirectional type checking, an algorithm
that generalizes pure type synthesis which we have applied to MinML so
far. Unlike full type inference as employed in the core language
of Standard ML, bidirectional type checking is quite robust and allows
subtyping as well as parametric polymorphism, existential types,
and recursive types without restrictions.