Advanced Functional Programming Languages




The goal of this class is to expose students to advanced programming language ideas, including theory of programming languages, type systems, high-level programming abstractions, and program analyses. We will develop these ideas in three parts.

  1. First, we start with a brief introduction to lambda calculus a compact but highly expressive programming language. Due to its simplicity lambda-calculus has been used to encode prototype type systems and program analysis.

  2. Second, we spend most of the class studying Haskell, a general purpose, functional programming language. Haskell directly implements the ideas of lambda-calculus and provides a high-level programing language that uses various novel programming techniques, like strong-typing, absence of side-effect, laziness, and monadic programming.

  3. Third, we present basic concepts of formal verification via Liquid Haskell, a refinement type checker for Haskell programs that extends Haskell’s types with logical predicates to allow for expressive user specifications.


No prerequisites are officially required for the class. Some familiarity with the concepts of functional programming would make the transition to the Haskell world easier.


The grading is not yet finalized.