CPSC521: FOUNDATIONS OF FUNCTIONAL PROGRAMMING
Lecturer: Robin Cockett
The
purpose of the course is to explore various aspects of functional
programming using Haskell. In particular, the course provides an
introduction to the lambda calculus, types in programming, and the role
of these in the implementation of
functional programming.
Why is functional programming important ....
- It promotes the view of programming as a mathematical
activity.
- It promotes programming with abstractions (generic code).
- It is type safe .... the Hindley-Milner polymorphic type checker.
- It allows fast accurate
prototyping for complex programs.
- It has datatypes and monads!
COURSE OUTLINE:
There will be a midterm exam and a final exam. The course will
cover
the following topics in roughly this order:
- Introduction to data, maps, and folds in Haskell (3 lectures
+
assignment)
- Monads, classes, and other topics (3 lectures + assignment)
- Introduction to the lambda calculus (5 lectures)
- Introduction to rewriting theory (4 lectures + assignment)
- Types and programming (5 lectures + assignment)
READING (recommended):
- Benjamin Pierce "Types and Programming Languages" MIT Press.
- Graham Hutton "Programming in Haskell" Cambridge University Press.
LECTURE NOTES (as they become available):
ASSIGNMENTS:
- [Due September 21]
Getting
going with Haskell (8%) (previous years: 2006 assignment 1, 2003 assignment
1).
- [Due October 19]
Searching (see some notes here)-
sudoku
(14%)
- [Due November 16] A lambda
calculus reducer (8%).
- [Due December] Type
inference for the lambda calculus (15%).
EXAMS:
- Midterm exam (20%) (2005 and answers) previous midterms (2002)
and 2007 exercise sheet!
- Final exam (35%), previous finals (2002).
LAB. NOTES:
Please find the lab. notes here.
HASKELL LINKS:
LAMBDA CALCULUS AND FUNCTIONAL
PROGRAMMING LINKS:
- John Harrison's notes
on functional programming.
- Larry Paulson's notes
on a programming approach to the lambda calculus.
- A basic
introduction to the untyped Lambda Calculus by Ken Slonneger.
- Here is are of Barendregt's notes on
functional programming and the lambda calculus.
- Claus Reinke's page on
functional programming.
- Here is a lambda
calculus reduction workbench written by Peter Sestoft. The reducer
is written in Moscow ML
and allows one to explore different reduction strategies.
MONAD LINKS
OTHER LINKS
- Ten reasons why you really should not take any course like this (here)
- Yet another language geek (here)