Skip to main content
Department of Information Technology

Advanced functional programming 2012


  • Please read the following general statements about cheating and plagiarism when handing in assignments:
  • The question regarding the exam does not entail that the exam date will be moved. It was only assessing if there were several students that had no practical possibility to attend the ordinary exam in January. An extra time might be arranged, but it is only for those students, not for everyone.


Note that there are 14 lectures in the schedule, but the course consists only of ten lectures. Some lectures will thus be removed, but they are there to cater for changes in my availability.



Cons Åhs

Teaching assistant:

Stavros Aronis Office hours: Wednesdays 09:00 - 12:00


This course should be seen as a continuation of a basic course in functional programming, taking over where it stopped by introducing different languages with their special properties and more advanced concepts.

The course will cover, or introduce, three languages: Common Lisp, Erlang and Haskell. Some of the concepts covered in the course are higher order functions (but the course assumes you know the basics of this), lazy evaluation, program data equivalence, processes, macros done right, monads and more.


Read the prerequisites to find out what I assume that you already know about functional programming.


To fulfill the course you will have to complete

  1. Three assignments (one in each language)
  2. One larger project (you choose the language)
  3. A written exam

Lecture Overview

  1. Introduction, Erlang Overview pdf
  2. Concurrent Programming in Erlang pdf
  3. Advanced Concepts in Erlang pdf
  4. Introduction to Common Lisp pdf
  5. Common Lisp Macros pdf
  6. Advanced Concepts in Common Lisp pdf
  7. Introduction to Haskell pdf
  8. Type classes pdf
  9. Modules and Monads pdf (also, see the Wikipedia page on monads)
  10. More on Monads pdf, Use of Erlang at Klarna


These are recommended exercises to use for getting hands on knowledge in the different languages. The exercises are not mandatory and do not have to be handed in, but the general recommendation is to do them. They range from almost trivial to more challenging and difficult.

For all the exercises (and assignments), it is recommended that you take a test driven approach, i.e., start by formulating a number of tests (input and their expected outcome). This is a great way to gain understanding of a problem without spending time on writing code. There are unit test frameworks available for all three languages.

Books and Links

A collection of recommended reading, both books and links.


Some short advice on using Emacs when editing and running programs in the various languages.

Course page for the previous instance of the course can be found here. There will be some minor changes for this year, but the main focus of the course will be the same.

Updated  2012-12-11 21:27:20 by Cons T. Åhs.