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

# 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.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 |

# Lectures

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 |