The course catalog has an outdated description of this course as one about Software Verification. Don’t believe the lies! This course is about functional programming.
Immutable, higher-order, side-effect free programming combines with various structuring disciplines (e.g., static type inference, monads) to offer a powerful, alternative viewpoint on programming. Ideas from functional programming are more than 50 years old, but have only recently gained acceptance in the mainstream.
We will learn Haskell and its idioms, with an eye towards the language-based thinking of CS131 (but none of its formalism). The course culminates in a project.
Prerequisites: 62; 101 advisable. This course is a CS elective. Please see the syllabus for more information.
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 | |
---|---|---|---|
Final project | 2020-03-04 | 2020-04-30 | |
5 | Monads | 2020-03-02 | 2020-03-09 |
4 | Parsing | 2020-02-12 | 2020-02-26 |
3 | The “While” programming language | 2020-02-05 | 2020-02-11 |
2 | Type classes | 2020-01-29 | 2020-02-04 |
1 | Haskell warmup | 2020-01-14 | 2020-01-28 |
Worksheets are for practice, not credit.
Office hours
Day | Time | Location | |
---|---|---|---|
Prof. Michael Greenberg | Thursday | 11am–noon | Millikan 1249 |
Prof. Michael Greenberg | Wednesday | 10am–noon | Edmunds 225 |
Lectures
Date | Lecture | Notes | |
---|---|---|---|
1 | Jan. 21 | Self-study (notes: Introduction, learning Haskell) | |
2 | Jan. 23 | Self-study (notes: Higher-order functions) | |
3 | Jan. 28 | Folds | HW01 due at 10pm |
4 | Jan. 30 | Kinds and type classes; Interpreters | |
5 | Feb. 4 | Functor | HW02 due at 10pm |
6 | Feb. 6 | WhileNZ | |
7 | Feb. 11 | Parsing | HW03 due at 10pm |
8 | Feb. 13 | Applicative | |
9 | Feb. 18 | Parsing with combinators | |
10 | Feb. 20 | Applicative parsing, in depth | |
11 | Feb. 25 | More applicative parsing | HW04 due at 10pm on Wednesday |
12 | Feb. 27 | Monads | |
13 | Mar. 3 | Monads and IO | |
14 | Mar. 5 | Project proposals | HW05 due at 10pm on Monday |
15 | Mar. 10 | Design breakouts | |
16 | Mar. 12 | Midterm | Project proposals due on Friday at 10pm |
Mar. 17 | SPRING BREAK | ||
Mar. 19 | SPRING BREAK | ||
17 | Mar. 24 | Compilation | |
18 | Mar. 26 | Compilation | |
19 | Mar. 31 | Liquid Haskell | HW06 due at 10pm |
20 | Apr. 2 | Liquid Haskell | |
21 | Apr. 7 | GADTs | HW07 due at 10pm |
22 | Apr. 9 | GADTs | |
23 | Apr. 14 | Benchmarking | HW08 due at 10pm |
24 | Apr. 16 | Project checkpoint | |
25 | Apr. 21 | Hacking | |
26 | Apr. 23 | Lenses | |
27 | Apr. 28 | Hacking and debriefing | |
28 | Apr. 30 | Project presentations | Project writeup and code due before class |
29 | May 5 | Project presentations |