Course syllabus


DAT280 / DIT261 Parallel functional programming lp4 vt24 (7.5 hp)

The course is offered by the department of Computer Science and Engineering

Contact details




  • Evan Cavallo (
    • Office hours between 10 and 12 on Wednesdays, in 6461.

When using office hours, it is a good idea to send a mail, preferably the day before, with a good explanation of your problem and of what you have tried to do to solve it. It may turn out that an email discussion is sufficient to solve your problem. Please do not expect instant turnaround, however. Our TAs have a lot to do, and need to avoid fragmentation.

Student Representatives

Please volunteer to be a student representative! We will call for volunteers in the first three lectures. 

The following Chalmers students have kindly agreed to be student representatives:


  • Jacob Bengtsson <jacob DOT bengtsson AT rocketmail DOT com>
  • Jonatan Mentzer <jonatan DOT mentzer AT gmail DOT com>
  • Matheus de Sousa Bernardo <matheusd AT student DOT chalmers DOT se>
  • Adam Magnusson <admag2001 AT gmail DOT com>


  • Samuel Hammersberg <samuel DOT hammersberg AT gmail DOT com>
  • Sebastian Selander <gusselase AT student DOT gu DOT se>

Please feel free to mail Robert, the TA, or one of the student representatives if you have questions or concerns about the course.


Notes from previous years mid-term course evaluation meeting:
On Wednesday, May 3, 2023, we held the mid-term course evaluation meeting with the four student representatives and all the teachers.
Generally, the students feel the course is going well. They are happy that they are gaining the knowledge that they expected from the learning outcomes; they find the assignments sufficiently challenging and open ended, and they find the course to be quite practical. The emphasis on benchmarking is appreciated.
Some suggested improvements were as follows:
1) improve lab descriptions to be a little more precise about what is needed for a pass.
2) include a course introduction (about the shape of the course etc) early
3) Augment the Canvas with an introductory part that says how to use this particular set of Canvas pages (including, for example, the fact that deadlines appear in the Canvas calendar).
4) Extend the time between first and second deadlines on labs to 10 days. (This is why there are now 10 or 11 days between deadlines on the final two labs this year.)
We also discussed possible ways to get access to better parallel computing resources, and the possibility of keeping a repo of benchmark results on different hardware. We will do some further investigation on both these points.
Finally, we noted that DNS offers free food to those who fill in course surveys on the first monday of each reading period. We will advertise this on the Canvas, as it would be useful to get a higher response rate.


Guest Lecturers

  • Troels Henriksen, designer and implementor of Futhark, (Links to an external site.) DIKU Copenhagen
  • Peter Sestoft, Java expert, ITU Copenhagen
  • Gabriele Keller, Research group leader, Utrecht University
  • Erik Stenman, Erlang expert and entrepreneur
  • Richard Carlsson, Erlang expert, Klarna
  • Koen Claessen, Professor, Chalmers

Course purpose

The aim of the course is to introduce the principles and practice of parallel programming in a functional programming language. By parallel programming, we mean programming using multiple hardware cores or processors in order to gain speed. The course covers approaches to parallel functional programming in both Haskell and Erlang. It covers current research on these topics, and also research on other approaches. The course relies heavily on scientific papers as its source materials and is intended also to give students some insights into research in computer science by considering the development of a sub-field over time. Guest lectures from both academia and industry help to place the presented research and programming methods in context.



Lectures are given in person at campus, and will not be streamed at the moment.

Here is the schedule in  TimeEdit.

(There will be no teaching on holiday or self-study days, and the schedule will be adjusted accordingly.)

Lab deadlines (may change, but will probably not. An announcement will me bade in that case). Each lab has a second deadline, typically two weeks after the first deadline, where you may resubmit a revised version. Please note that in order to submit for the second deadline, you need to have given the lab a serious attempt by the first deadline.

Lab A: April 12th

Lab B: April 26th

Lab C: May 10th

Lab D: May 24th

Course literature

This course does not have a set book. Instead, you will be expected to read a number of research papers. Links to those papers will be made available through the lectures page. However, note that Simon Marlow’s book on Parallel and Concurrent Programming in Haskell (Links to an external site.) covers a good chunk of the course (and lots of other interesting stuff). The book is currently free to read online at the O'Reilly site.

The lectures appear under Modules and we will also add them to the calendar.  Click on a lecture and you will get a description of what the lecture is about, related reading material and the slides. 


Course design

The course has four compulsory lab exercises, which should be done in pairs. Only in special circumstances will we permit students to work alone, as we must conserve scarce TA resources. We suggest using the Discussions area of the course Canvas to help in the search for a lab partner.

We will use fire for submission and grading of labs. The submission link will be The lab exercises are central to your learning on this course. Those who take them seriously typically also pass the written exam easily. That is our intention.

You must pass all four lab exercises (as well as the final written exam) to complete the course.

The course has two main parts, each of which in turn has two parts, and hence the four lab exercises. 

  1. Parallel Programming in Haskell
  2. Robust Parallel Erlang Programming
  3. Data Parallel Programming
  4. Map Reduce and noSQL databases

The guest lectures on the course are not just entertaining additions but contain examinable material. For example, there is a lab exercise related to the lecture on Futhark. So come to the guest lectures! They also broaden the view of parallel functional programming presented by the course.

Changes made since the last occasion

Mary Sheeran used to be the examiner in previous instances, but she has since then partially retired. Robert Krook has been the TA for several years, and has taken over Mary's role in the course. To replace Robert, we got Evan Cavallo as a new TA. There will be a new lecture on QuickerCheck, a parallel implementation of Haskell QuickCheck, as well as a remote guest lecture on multicore OCaml by KC Sivaramakrishnan.

Learning objectives and syllabus

Learning objectives:

Knowledge and understanding

1. Distinguish between concurrency and parallelism.

2. Give an overview of approaches to parallelism in functional programming languages in the scientific literature.

Skills and abilities

1. Write, modify and test parallel functional programs, to run on a variety of architectures such as shared memory multiprocessors, networks of commodity servers, and GPUs.

2. Interpret parallelism profiles and address bottlenecks.


Judgement and approach

1. Identify when using a functional language may be appropriate for solving a parallel programming problem.

2. Select an appropriate form of parallel functional programming for a given problem, and explain the choice.

Link to the syllabus on Studieportalen.

Study plan (Chalmers)

TODO The study plan at GU should be linked here.

Examination form

You must complete all four lab exercises to complete the course. Labs are done in pairs.

You must also pass the written exam at the end of the course. Your grade on the course is determined entirely by your result on the written exam. We generally do not provide old exams, but here is one from 2023 to give you an indication of what the exam might look like.