Advanced Functional Programming

Graham Hutton, University of Nottingham


Functional languages represent the leading edge of programming language design, and the primary setting in which new programming concepts are introduced and studied. This module builds upon the introductory functional programming module by focusing on a number of more advanced topics, including aspects of recent and current research.

The precise topics covered will vary from year to year, but will include topics such as programming with effects, reasoning about programs, and improving program efficiency.


The exam for the module this year is a take-home exam that must be completed in a 24-hour period. Further details are available in the exam guide on moodle.


The coursework for the module comprises two extended programming exercises, and will be released on moodle at appropriate points during the module.



      Book 2e Cover


  1. Course overview
  2. Sudoku in Haskell I
  3. Sudoku in Haskell II
  4. Sudoku in Haskell III
  5. Coursework 1: connect four
  6. Functors
  7. Applicative functors
  8. Monads I
  9. Monads II
  10. Monads III
  11. Monads IV
  12. Coursework 2: monadic compiler
  13. Reasoning about programs
  14. Induction
  15. Making append vanish I
  16. Making append vanish II
  17. Compiler correctness

Additional material: