Topics, roughly 1 week each:
Abstract syntax and operational semantics
Functional programming with lists and recursion
First-class and higher-order functions; continuations
Functional programming with algebraic data types and static types (in ML)
Type systems and parametric polymorphism
Cultural enrichment: Haskell, laziness, and automated testing
ML type inference
Lambda calculus; small-step semantics
Recursion theory; denotational semantics; definitional interpreters
Data abstraction
Object-orientation and inheritance
Modules
If all goes well we'll have a bonus unit on logic programming.