Course pages 2015–16
Advanced Functional Programming
Principal lecturers: Dr Anil Madhavapeddy, Dr Jeremy Yallop
Additional lecturer: Prof Alan Mycroft
Taken by: MPhil ACS, Part III
Prerequisites: Students wishing to take the module should have some experience of a typed functional programming language and an understanding of type inference.
This module aims to teach students how to use the features of modern typed functional programming languages (e.g. OCaml, Haskell) to design and implement libraries and DSLs. It aims to demonstrate how such techniques can improve both correctness and efficiency.
Students wishing to take the module should have some experience of a typed functional programming language and an understanding of type inference.
Part 1: Types in functional languages.
- The Curry-Howard isomorphism. Hindley-Milner type inference and beyond. Introduction to OCaml.
- Higher-rank polymorphism. Duality of existentials and universals.
- Records, variants, and row polymorphism.
- Modules, signatures, and functors.
- Phantom types and generalised algebraic data types.
Part 2: Programming in functional languages.
- Typeful interfaces and domain-specific languages.
- Monads and related abstractions.
- Type-indexed values.
- Staging and metaprogramming.
On completion of this module students should be able to:
- Understand extensions to Hindley-Milner type systems common in modern typed functional programming languages (e.g. OCaml, Haskell).
- Apply modern approaches to designing libraries and DSLs, with appropriate use of monads, applicative functors, and related abstractions.
- Use advanced type system features to specify precise typed interfaces.
- Understand staging for metaprogramming.
Coursework will consist of three take-home problem sets.
In addition to the take-home problem sets there will be (unassessed) interactive exercises to accompany many of the lectures.
Three take-home problem sets, each accounting for approximately a third of the marks.
Minsky, Y. & Madhavapeddy, A. and Hickey, J. (2013). Real World OCaml.
O'Reilly Media (1st edition).
(Also available online.) We'll assume familiarity with the concepts introduced in chapters 1--6.
Pierce, B. C. (2002). Types and Programming Languages. The MIT Press (1st edition). Pierce's book will be a useful reference for some of the concepts introduced in the first half of the course, although we'll be taking a less formal approach.