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 | 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 | |
Lambda calculus | |
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 |
Lectures
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 |