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?

“Haskell is the one true programming language.” —Aloke Desai

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

“Use the types, Luke! Even if you don’t quite understand what something does at first, the types are always a good place to start.” — William Marks

“Knowing lambda calculus has changed my outlook on learning new languages.” —Kevin Wynn

“Learning a functional language in a world dominated by imperative languages is super useful and satisfying.” —Ian Welty

“Mind-bending! … Abstraction! PL really takes it to the limit.” —Patrick Little, Conqueror of the Monad

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


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 Pi calculus 2016-11-28 2016-12-09
7.0 Typed lambda calculus 2016-11-06 2016-11-21
6.0 Untyped lambda calculus 2016-10-26 2016-11-06
5.0 Monads 2016-10-19 2016-10-26
4.0 Parsing with Applicative 2016-10-01 2016-10-10
3.0 The “While” programming language 2016-09-21 2016-09-30
2.5 Higher-order functions, redux 2016-09-14 2016-09-22
2.0 Type classes 2016-09-06 2016-09-14
1.0 Haskell warmup 2016-08-29 2016-09-07

Office hours

Day Time Location
Eric Campbell Sunday 7-9pm Edmunds 227
Patrick Little Monday 7-9pm Edmunds 227
Prof. Michael Greenberg Wednesday 3–5pm Edmunds 225


Date Lecture Notes
1 Aug 30 Introduction, learning Haskell
2 Sep 1 Introduction, continued
3 Sep 6 Higher-order functions; datatypes HW 1 due next day
4 Sep 8 Our first interpreter; type classes
5 Sep 13 Quiz; review HW 2 due next day
6 Sep 15 More on folds, Functor
7 Sep 20 Functor; WhileNZ in math
8 Sep 22 Quiz; Functor; WhileNZ in Haskell HW 2.5 due at the beginning of class
9 Sep 27 Applicative Applicative worksheet
10 Sep 29 Parsing with Applicative HW 3 due on Friday, September 30th
11 Oct 4 Applicative review; Monads (WhileNZ parser)
12 Oct 6 Monads (code) HW 4 due on Monday, October 10th
13 Oct 11 Review
14 Oct 13 In class midterm
Oct 18 Fall recess
15 Oct 20 QuickCheck
16 Oct 25 QuickCheck; lambda calculus HW 5 due next day
17 Oct 27 Lambda calculus: definition, encodings Lambda calculus worksheet
18 Nov 1 Lambda calculus: evaluation and step functions, nontermination
19 Nov 3 Lambda calculus: recursion and the Y combinator HW 6 due on Sunday
20 Nov 8 Types for the lambda calculus Typed lambda calculus worksheet
21 Nov 10 Even more types
22 Nov 15 Wow, he’s still talking about types
23 Nov 17 Tyyyyyypes HW 7 due on Monday
24 Nov 22 Debate!
Nov 24 Thanksgiving
25 Nov 29 Pi calculus Read Threads Cannot be Implemented as a Library
26 Dec 1 More pi calculus Read Composable Memory Transactions
27 Dec 6 Review HW 8 due Friday, December 9th
Dec 12 Final exam at 2pm