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!”
“TYPES TYPES TYPES ARE THE ANSWER ALWAYS!”
“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.”
Homeworks
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 |
Lectures
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 |