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.0 Code review (in class!) 2017-04-24 2017-05-01
6.0 Untyped lambda calculus 2017-04-03 2017-04-16
5.0 Monads 2017-03-21 2017-04-02
4.0 Parsing 2017-02-21 2017-03-05
3.0 The “While” programming language 2017-02-12 2017-02-19
2.0 Type classes 2017-01-30 2017-02-12
1.0 Haskell warmup 2017-01-18 2017-01-29

Worksheets are due at the beginning of a class day.

Worksheets Due
Higher-order functions Monday, Feb. 06
Applicative Monday, Feb. 27
Lambda calculus Wednesday, Apr. 12Monday, Apr. 10
Types Wednesday, Apr. 26th

Office hours

Day Time Location
Prof. Michael Greenberg Tuesday 3–5pm Edmunds 225
Hannah Christenson and/or Zach Hauser Thursday 7–9pm Edmunds 227
Zach Hauser and/or Hannah Christenson Saturday 2–4pm Edmunds 227


Date Lecture Notes
1 Jan. 18 Introduction, learning Haskell
2 Jan. 23 Introduction, continued Hutton, 1–3
3 Jan. 25 Higher-order functions HW 1 due Sunday; Hutton 4, 6, 7
4 Jan. 30 Our first interpreter; type classes Hutton 8
5 Feb. 01 More type classes
6 Feb. 06 Type classes
7 Feb. 08 Functor; WhileNZ in math Higher-order functions worksheet due in class; HW 2 due Sunday; Hutton 12.1
8 Feb. 13 Functor; WhileNZ in code
9 Feb. 15 Applicative HW 3 due on Sunday; Hutton 12.2
10 Feb. 20 Hands-on Applicative
11 Feb. 22 Parsing with Applicative
12 Feb. 27 More parsing with Applicative Applicative worksheet due in class; Hutton 12, 13
13 Mar. 01 Moving towards Monads HW 4 due on Sunday; Hutton 10, 11
14 Mar. 06 Review
15 Mar. 08 Midterm in class
Mar. 13 Spring break
Mar. 15 Spring break
Mar. 20 No class
16 Mar. 22 Monads
17 Mar. 27 QuickCheck
18 Mar. 29 Lambda calculus: definition, encodings (definitions sheet) HW 5 due on Sunday
19 Apr. 03 Lambda calculus: evaluation and step functions, nontermination
20 Apr. 05 Lambda calculus catch-up HW 6 checkpoint 1 on Sunday
21 Apr. 10 Lambda calculus: recursion and the Y combinator
22 Apr. 12 Types for the lambda calculus Lambda calculus worksheet due in class; HW 6 checkpoint 2 (final due date!) on Sunday
23 Apr. 17 More types
24 Apr. 19 Tyyyyyyypes HW 7 checkpoint 1 on Sunday
25 Apr. 24 Recursion
26 Apr. 26 Code review Types worksheet due in class
27 May 01 Code review
28 May 03 Review HW 7 checkpoint 2 (final due date!) at 10pm
May 11 Final exam at 2pm in Edmunds 114