In this module you will study in detail the design of type assignment systems for programming languages and focus on the importance of a sound theoretical framework, in order to be able to reason about the properties of a typed program. You will also study and compare the types systems of various modern functional and object-oriented programming languages.
- Review of Lambda calculus
- Curry type assignment and principal types
- Recursion and polymorphism
- Type checking vs type inference
- System F
- Extensions for practical type inference, including data types, type classes, type constraints and coercion
- System F_C
- Subtypes and subtype inference
- Advanced topics, e.g. higher-rank types, dependent types and ownership types
The provided course notes developed by Prof Van Bakel are fantastic, and significantly better than those found here.
I highly advise you read them instead of these notes, which are barebones revision notes for my own study.
Taught by Professor Steffen van Bakel