Type checking revisited: for functional and OO languages. Parametric polymorphism. Hindley-Milner. Subtyping.