The course catalog has an outdated description of this course as one about Software Verification. Don’t believe the lies! This course is about functional programming.

Immutable, higher-order, side-effect free programming combines with various structuring disciplines (e.g., static type inference, monads) to offer a powerful, alternative viewpoint on programming. Ideas from functional programming are more than 50 years old, but have only recently gained acceptance in the mainstream.

We will learn Haskell and its idioms, with an eye towards the language-based thinking of CS131 (but none of its formalism). The course culminates in a project.

Prerequisites: 62; 101 advisable. This course is a CS elective. Please see the syllabus for more information.


Submit homeworks at the new submission site. You may have to enroll in the course there.

I urge you to use the Haskell documentation as well as the library documentation in Hackage and Hoogle.

Homework Posted Due
Final project 2020-03-04 2020-04-30
5 Monads 2020-03-02 2020-03-09
4 Parsing 2020-02-12 2020-02-26
3 The “While” programming language 2020-02-05 2020-02-11
2 Type classes 2020-01-29 2020-02-04
1 Haskell warmup 2020-01-14 2020-01-28

Worksheets are for practice, not credit.

Office hours

Day Time Location
Prof. Michael Greenberg Thursday 11am–noon Millikan 1249
Prof. Michael Greenberg Wednesday 10am–noon Edmunds 225


Date Lecture Notes
1 Jan. 21 Self-study (notes: Introduction, learning Haskell)
2 Jan. 23 Self-study (notes: Higher-order functions)
3 Jan. 28 Folds HW01 due at 10pm
4 Jan. 30 Kinds and type classes; Interpreters
5 Feb. 4 Functor HW02 due at 10pm
6 Feb. 6 WhileNZ
7 Feb. 11 Parsing HW03 due at 10pm
8 Feb. 13 Applicative
9 Feb. 18 Parsing with combinators
10 Feb. 20 Applicative parsing, in depth
11 Feb. 25 More applicative parsing HW04 due at 10pm on Wednesday
12 Feb. 27 Monads
13 Mar. 3 Monads and IO
14 Mar. 5 Project proposals HW05 due at 10pm on Monday
15 Mar. 10 Design breakouts
16 Mar. 12 Midterm Project proposals due on Friday at 10pm
17 Mar. 24 Compilation
18 Mar. 26 Compilation
19 Mar. 31 Liquid Haskell HW06 due at 10pm
20 Apr. 2 Liquid Haskell
21 Apr. 7 GADTs HW07 due at 10pm
22 Apr. 9 GADTs
23 Apr. 14 Benchmarking HW08 due at 10pm
24 Apr. 16 Project checkpoint
25 Apr. 21 Hacking
26 Apr. 23 Lenses
27 Apr. 28 Hacking and debriefing
28 Apr. 30 Project presentations Project writeup and code due before class
29 May 5 Project presentations