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 Reading and explaining code 2018-04-24 2018-05-02
7 Typed lambda calculus 2018-04-05 2018-04-22
6 Untyped lambda calculus 2018-03-20 2018-04-05
5 Monads 2018-02-22 2018-03-02
4 Parsing 2018-02-11 2018-02-23
3 The “While” programming language 2018-02-01 2018-02-08
2 Type classes 2018-01-25 2018-02-01
1 Haskell warmup 2018-01-16 2017-01-25

Worksheets are due at the beginning of a class day.

Worksheets Due
Types Tuesday, Apr. 17 Thursday, Apr. 19
Lambda calculus Tuesday, Apr. 3 Thursday, Apr. 5
Applicative Tuesday, Feb. 20
Higher-order functions Tuesday, Jan. 30

Office hours

Day Time Location
Prof. Michael Greenberg Thursday 11am–noon Millikan 2099
Prof. Michael Greenberg Wednesday 2–5pm Edmunds 225
Claire Genre Monday 7–9pm Edmunds Lab
Michael Untereiner Wednesday 7–9pm Edmunds Lab


Date Lecture Notes
1 Jan. 16 Introduction, learning Haskell
2 Jan. 18 Higher-order functions
3 Jan. 23 Our first interpreter Hutton, 1–3
4 Jan. 25 Type classes HW 1 due at 10pm; Hutton 4, 6, 7
5 Jan. 30 Functor Higher-order functions worksheet due in class; Hutton 8
6 Feb. 1 WhileNZ HW 2 due at 10pm; Hutton 8
7 Feb. 6 Static and dynamic analysis Hutton 12.1
8 Feb. 8 Applicative HW 3 due at 10pm
9 Feb. 13 Parsing with Applicative Hutton 12.2
10 Feb. 15 Parsing WhileNZ
11 Feb. 20 Parsing roundup Applicative worksheet due in class; Hutton 12, 13
12 Feb. 22 Monads HW 4 due Friday at 10pm
13 Feb. 27 QuickCheck Hutton 10, 11
14 Mar. 1 IO HW 5 due Friday at 10pm
15 Mar. 6 Review
16 Mar. 8 Midterm in class
Mar. 13 Spring break
Mar. 15 Spring break
17 Mar. 20 Lambda calculus: definition (definitions slide)
18 Mar. 22 Lambda calculus: encodings
19 Mar. 27 Lambda calculus: evaluation and step functions
20 Mar. 29 Lambda calculus: recursion and the Y combinator HW 6 checkpoint 1 due at 10pm
21 Apr. 3 Lambda calculus odds and ends Lambda calculus worksheet due in class
22 Apr. 5 Types for the lambda calculus HW 6 checkpoint 2 due at 10pm (final due date!)
23 Apr. 10 More types (guest lecture by Prof. Bruce)
24 Apr. 12 Still types HW 7 checkpoint 1 due Sunday at 10pm
25 Apr. 17 Not the type to stop talking about types Types worksheet due in class
26 Apr. 19 Types HW 7 checkpoint 2 due Sunday at 10pm (final due date!)
27 Apr. 24 Code review
28 Apr. 26 Code review
29 May 1 Review Code exposition due Wednesday at 5pm
May 11 Final exam is 2–5pm in Millikan 2099