From the course catalog:

A thorough examination of issues and features in language design and implementation, including language-provided data structuring and data-typing, modularity, scoping, inheritance and concurrency. Compilation and run-time issues. Introduction to formal semantics.

Prerequisites: The intro sequence (52/62 or 60/70) and 81. This course is required for CS majors. Please see the syllabus for more information.

But don’t listen to me… what do other students say?

“Useful at parties!”


“Beauty matters, and as a corollary, correctness is preferable to efficiency. It was enriching to realize the benefits of beauty for its own sake—it’s a big part of why I do CS.”

“[I now have] a better appreciation for CS/computation foundations… λ and π calculi are so cool! Church encodings are mindblowing.”

“Haskell is the one true programming language.”

“Haskell! #Types4Life”

“I feel like I have a larger ‘arsenal’ of tools/approaches to use for tackling new problems.”

“This notation is pretentious.”

“Haskell is a cool language and people will think you’re cool for knowing it.”

“Mind-bending! … Abstraction! PL really takes it to the limit.”

“Haskell: it’s dope. Higher order functions: super useful, plus it shows people you’re cool.”


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
8 Pi calculus 2017-11-21 2017-12-03
7 Typed lambda calculus 2017-11-06 2017-11-19
6 Untyped lambda calculus 2017-10-22 2017-11-05
5 Monads 2017-10-02 2017-10-08
4 Parsing 2017-09-25 2017-10-01
3 The “While” programming language 2017-09-18 2017-09-24
2 Type classes 2017-09-11 2017-09-17
1 Haskell warmup 2017-08-28 2017-09-10

Worksheets are due at the beginning of a class day.

Worksheets Due
Types Tuesday, Nov. 14
Lambda calculus Thursday, Nov. 2
Applicative Tuesday, Oct. 3
Higher-order functions Thursday, Sep. 14

Office hours

Day Time Location
Prof. Michael Greenberg Wednesday 2:30–5pm Edmunds 225
Austin Blatt and/or Madhura Jayaraman Thursday 7–9pm Edmunds Lab
Austin Blatt and/or Madhura Jayaraman Saturday 2–4pm Edmunds Lab


Date Lecture Notes
1 Aug. 29 Introduction, learning Haskell
2 Aug. 31 More learning Haskell
3 Sep. 5 Higher-order functions Hutton, 1–3
4 Sep. 7 Our first interpreter HW 1 due Sunday; Hutton 4, 6, 7
5 Sep. 12 Type classes Hutton 8
6 Sep. 14 Functor Higher-order functions worksheet due in class; HW 2 due Sunday; Hutton 12.1
7 Sep. 19 WhileNZ
8 Sep. 21 Applicative HW 3 due on Sunday; Hutton 12.2
9 Sep. 26 Parsing with Applicative
10 Sep. 28 Parsing WhileNZ HW 4 due on Sunday; Hutton 12, 13
11 Oct. 3 Monads Applicative worksheet due in class
12 Oct. 5 Do notation; QuickCheck HW 5 due on Sunday
13 Oct. 10 Review
Oct. 12 Midterm in class Hutton 10, 11
Oct. 17 Fall recess
14 Oct. 19 Lambda calculus: definition (definitions slide)
15 Oct. 24 Lambda calculus: encodings
16 Oct. 26 Lambda calculus: evaluation and step functions HW 6 checkpoint 1 on Sunday
17 Oct. 31 Lambda calculus: recursion and the Y combinator
18 Nov. 2 Types for the lambda calculus Lambda calculus worksheet due in class; HW 6 checkpoint 2 (final due date!) on Sunday
19 Nov. 7 More types
20 Nov. 9 Tyyyyyyypes HW 7 checkpoint 1 on Sunday
21 Nov. 14 Recursion Types worksheet due in class
22 Nov. 16 Code review HW 7 checkpoint 2 (final due date!) on Sunday
23 Nov. 21 Concurrency
Nov. 23 Thanksgiving (pumpkin pie calculus)
24 Nov. 28 Pi calculus
25 Nov. 30 Pi calculus implementation HW 8 due on Sunday
26 Dec. 5 Review
Dec. 13 Final exam is 2–5pm in Millikan 2113