CPSC521:  FOUNDATIONS OF FUNCTIONAL PROGRAMMING

(Winter 2025,  MS211, TuTh 3:30pm-4:45pm)

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, abstract machines, types in programming, type inference, and the role of these in the implementation of functional programming.

Why functional programming matters ....

COURSE OUTLINE:

There will be a midterm exam and a final exam.  The course will cover the following topics in roughly this order:

READING (recommended):

LECTURE NOTES (as they become available):

ASSIGNMENTS:
  1. [Due January 24] Getting going with Haskell (8%)   assignment 1 (template file is here with types)
  2. [Due Febuary 28] Lambda lifting (14%) assignment 2 (hint: here is some example code for \alpha renaming lambda expressions).
  3. [Due March 21] Abstract machines: lambda calculus reduction (8%) assignment 3.
  4. [Due April 11]  Type inference for the lambda calculus here (15%).
EXAMS:
  1. Midterm exam (20%) -- on the 13th March: previous exams -- please note a different order of topics may have been covered -- 2020, 2016, 2014,2010, 20092007, 2006 and exercise sheet, 2005 and answers, 2002.
  2. Final exam (35%), (previous finals 2002, 2006, 2007, and 2008 oral, 2014, 2016).
GRADESCOPE AND ZOOM:

The course will use gradescope for grading assignments and exams.  Students need to sign up at gradescope.ca (press the "sign up" button).  To find the course entry code, go to the course in D2L and pull down the "content" tab.  The zoom links for the on-line portions of the course will be here.


LAB. NOTES:

Please find the lab. notes (Adrian Tadic).

HASKELL  LINKS:

MONAD LINKS
LAMBDA CALCULUS AND FUNCTIONAL PROGRAMMING LINKS:

COMPUTABILITY LINKS: