Here is a proposed topic schedule for winter 2003. I will post the lecture notes, and adjust this page as the course proceeds. The notes are in the form of powerpoint slides.

- January 7, 2003.
- Slides: Course information, Introduction to Type Classes.
- Haskell code .

- January 9, 2003.
- Slides: Higher order types. Higher order type classes. The Monad Class. Multi-parameter type classes. Mutable: the generic reference class. An example: unification in a generic monad.
- Haskell code .

- Monday January 13, 2003.
**Special Monday Lecture due to POPL**.- Slides: Type classes with functional dependencies. Implicit parameters.
- Haskell code .

- January 21, 2003.
- Slides: Debugging Haskell with the Hood Debugger.
- Haskell code .

- January 23, 2003.
- Slides: Algorithms for Hindley-Milner type inference.
- Haskell code

- Reference Lecture on Monads.
- Slides: More about Monads: Monads as an ADT, Monad axioms, the Io monad example.
- Haskell code .

- January 27, 2003.
- Slides: Monads and Intepreters. Rules for language design and implementation. Sequence of language variations with different monads. Monadic plumbing. Modular language fragments. Sub classes of Monad, with extra functionality. The Eval class. Tying it all together. A "Rich" monad.
- Haskell code .

- January 29, 2003.
- Slides: Making instances of the Monad class, return and (>>=). Rules for recognizing the patterns within the plumbing. Instances for the "Rich" monad. State based algorithms. State in Haskell. The renaming example. The runST function. Rank two polymorphism.
- Haskell code .

- February 4, 2003.
- Slides: Monads as a data structures. Transformers as functions. Visualizing Transforms (using MetaML). Transformers as classes.
- Haskell code .
- The Monad Library
- The interpreter example..

- February 6, 2003.
- Slides: Polymorphism, Rank 2 polymorphism, Church Numerals, cata-build fusion, Hindley-Milner Polymorphism.
- Haskell code .

- February 11, 2003.
- Slides: Non Regular types
- Haskell code .

- February 13,& 18 2003.
- Slides: 4 different styles of generic programming
- Haskell code .

- February 20 2003.
- Slides: Continuation passing style, Continuation monad, Throw and catch, Callcc.
- Haskell code .

- February 25 2003.
- Slides: Dynamic Programming and Parsers. Dynamic programming. Memoization and lazy arrays. Parsing – String based. Parsing – Array based.
- Haskell code .

- March 4, 2003.
- Slides: Functional Graphs, a la Martin Erwig. King & Launchbury Depth-Frist search algorithms.
- Haskell code .
- Graph Module .
- Basic Module .
- Launchbury & King DFS code .

- March 6, 2003.
- Slides: Extensible Records
- Haskell code .

- March 11, 2003.
- Slides: Differences between ML and Haskell. Intro to MetaML.
- Slides: MetaML Examples: Staged Pattern Matching, Staaged interpreter. MetaML extensions.
- Haskell code for Comparison .
- ML code for Comparison .
- ML extensions illustrated .

- March 13, 2003.
- Slides: Algebraic and CoAlgebraic Programs. F Algebras. Initial and Final Algebras. Induction and CoInduction.
- Haskell code. .

- Additional Lectures to be determined. Some suggestions follow:
- Module Systems
- Testing Functional Programs
- Incremental Computation
- Foreign Function interfaces
- Gui's and user interfaces (Fudgets, TCL-Haskell, Fran etc.)
- calculating time and space complexity of lazy programs.