- Introduction
- Mathematical Preliminaries
- Untyped Arithmetic Expressions (
arith
) - An ML Implementation of Arithmetic Expressions (
arith
) - The Untyped Lambda-Calculus (
fulluntyped
) - Nameless Representation of Terms (
fulluntyped
) - An ML Implementation of the Lambda-Calculus (
fulluntyped
)
- Typed Arithmetic Expressions (
tyarith
) - Simply Typed Lambda-Calculus (
fullsimple
) - An ML Implementation of Simple Types (
simplebool
) - Simple Extensions (
fullsimple
) - Normalization
- References (
fullref
) - Exceptions (
fullerror
)
- Subtyping (
rcdsub
,fullsub
) - Metatheory of Subtyping (
rcdsub
,joinsub
,bot
) - An ML Implementation of Subtyping
- Case Study: Imperative Objects (
fullref
) - Case Study: Featherweight Java
- Recursive Types (
fullequirec
,fullisorec
) - Metatheory of Recursive Types
equirec
- Type Reconstruction (
recon
,fullrecon
) - Universal Types (
fullpoly
,fullomega
) - Existential Types (
fullpoly
) - An ML Implementation of System F
- Bounded Quantification (
fullfsub
,fullfomsub
) - Case Study: Imperative Objects, Redux (
fullfsubref
) - Metatheory of Bounded Quantification (
purefsub
,fullfsub
)
- Type Operators and Kinding (
fullomega
) - Higher-Order Polymorphism (
fullomega
) - Higher-Order Subtyping (
fomsub
,fullfomsub
) - Case Study: Purely Functional Objects (
fullupdate
)