CSE581 - Advanced Functional Programming, Lecture Notes
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.
- 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.
- January 21, 2003.
- January 23, 2003.
- 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.
- February 6, 2003.
- Slides:
Polymorphism, Rank 2 polymorphism, Church Numerals,
cata-build fusion, Hindley-Milner Polymorphism.
- Haskell code .
- February 11, 2003.
- February 13,& 18 2003.
- 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.
- March 6, 2003.
- March 11, 2003.
- 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.
Back to CSE583 Home Page