Computer Laboratory

Course pages 2016–17

Advanced Functional Programming


If you haven't used a typed functional language before then it would be wise to familiarize yourself with the basics before the course starts. We'll be using OCaml in the course, and recommend starting with either of the following books:

  • OCaml from the Very Beginning
    John Whitington
    Available in print, or as a PDF ($14.99)
  • Real World OCaml
    Yaron Minsky, Anil Madhavapeddy, Jason Hickey
    Available in print, or online. Chapters 1 to 6 give enough background for this course.

The OCaml Beginners mailing list is also a useful resource.

The first few lectures are quite theory oriented: we'll be looking at various typed lambda calculi, along with type inference in ML-family languages. If you haven't studied the lambda calculus before then some background reading is likely to make these lectures much easier to follow. There are many introductions available; one which fits well with our approach is

  • Types and Programming Languages
    Benjamin C. Pierce
    There are copies in the Computer Laboratory library and many of the college libraries.

The material in chapters 5 (The Untyped Lambda-Calculus) and 9 (Simply Typed Lambda-Calculus) is essential. We'll also be covering material from later chapters (11, 23, 24, 29, 30), although in much less detail than Pierce.

Additionally, the Part II (third year undergraduate) Types course is a less-advanced course covering ML, System F and the Curry-Howard correspondence.


Installing the tools beforehand will also make things easier when the course starts.

The OPAM package manager is the recommended way to install OCaml.

We will be using System Fω in the course to illustrate theoretical aspects of functional programming. We have provided an Fω interpreter (based on the interpreters by Pierce for the "Types and Programming Languages" book) so you can try out the examples.

The interpreter can be installed using OPAM with the following instructions:

    $ opam remote add advanced-fp git://
    $ opam install fomega

The interpreter can also be used directly in the browser.