TDA452 Functional programming

Quick Links:

Lectures • Exercises • Lab 1 • Lab 2• Lab 3• Lab 4 • Lab 5• Fire • Slack • Schedule


 


Course-PM

Course PM 2026 (PDF): the official course PM. The text below summarises it.

 TDA452 Functional programming lp2 HT26 (7.5 hp)

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

Contact details [Slack]

Teaching Assistants: 

Course Representatives

  • To be announced

Course purpose

Click to expand.

In this course, you will learn about functional programming through the Haskell programming language. Concrete topics encountered in the course include:

  • functions as first-class values
  • data structures (lists, tuples, user-defined data types)
  • recursion and recursive data types
  • polymorphism and type classes
  • pure functions vs input-output
  • modules and abstract data types
  • testing functional programs
  • lazy evaluations and infinite objects
  • introduction to monads

Schedule

Lectures are pre-recorded. The scheduled meeting times are referred to as Class meetings (still called "lectures" in TimeEdit). 

Week 1: Intro meeting on Monday 13:15,  regular class meetings on Tuesday 13:15 and Thursday 10:00.
Weeks 2–4: class meetings are on Mondays (13.15) and Thursdays (10.00).
Weeks 5–6: class meetings on Thursdays (10.00) only.

In addition, we have scheduled lab supervision hours were you can either meet a TA over zoom (from week 2) or in one of the computer rooms (from week 4).

  • From week 2 onward:  15:15-17 on Mondays and Wednesdays via zoom: send a link to your room in  #lab-queue on Slack
  • From week 4 onwards you may also ask questions at those times in person in the scheduled room.  Please use #lab-queue to join the queue for help either way.

Course literature

There is no mandatory literature for this course. 

Click for a sample of potentially useful resources in addition to the videos and slides.

Course design

Teaching is through pre-recorded lectures and self-study exercises, supported by online meetings related to the most recent lecture.  Class meetings are given two times a week. 

There are five programming labs, which you can do alone or in pairs. We encourage pairs: working with another person, you help each other learn.  Some of the labs are divided into two parts, so there are hand-in deadlines most study weeks.  The final lab is a choice between an own mini project or a more conventional lab.   Conventional labs are graded electronically; if a lab is not passed then students get multiple chances to resubmit until the given final deadline.  Those who choose to do a project for the final lab will give an oral presentation of the lab (usually over zoom). 

The lab submission is through the Fire system (see links from the labs).

Learning objectives and syllabus

Learning objectives

- write small to medium-sized functional programs for a variety of applications;
- exploit a variety of programming techniques typical in functional programming, such as: use of recursion, modelling with recursive datatypes, abstraction and reuse with the help of higher order functions and monads;
- appreciate the strengths and possible weaknesses of the functional programming paradigm.

Link to the syllabus Chalmers.

Link to the study plan

Examination form

The examination of the course has two parts:

  • Weekly assignments ("labs"), done alone or in pairs (pairs are encouraged).
  • An individual written exam after the end of the course (in January). Re-exams are given in April and August.
    Exam dates, once decided, are given on the student portal  (search: TDA452) https://www.student.chalmers.se/sp/examdates_list
  • Course code Course name Examination date Begins Location Length First day
    for sign-up
    Last day
    for sign-up
    TDA452 Functional programming 
    Module: 0211
    Tue 12 Jan 2027 8.30 am Johanneberg INSP 4 hours 12 Oct 2026 20 Dec 2026
    TDA452 Functional programming 
    Module: 0211
    Thu 01 Apr 2027 2.00 pm Johanneberg INSP 4 hours 15 Feb 2027 14 Mar 2027
    TDA452 Functional programming 
    Module: 0211
    Tue 17 Aug 2027 8.30 am Johanneberg INSP 4 hours 05 Jul 2027 01 Aug 2027
  • Remember that you have to sign up for the exam ahead of time (see last column)!

To pass the course it is necessary to pass all assignments and the written exam. Your final grade is determined by your grade on the written exam only (taking into account any bonus points).

Written Exam

The exam is written using the Inspera electronic exam system.  See the slides from the intro lecture for more information.

The grades awarded on the exam are 3, 4, 5.

A sample of old exams is available. Note that the exam includes a list of useful functions.  The only other permitted materials are a dictionary. 

Lab Assignments

In the table below you will find links to lab assignments that have to be handed in.

  • Each assignment has a submission deadline at which you must submit your solutions. Your first submission is expected to be a serious attempt to complete the lab.
  • If your submission does not pass (it's incorrect or simply badly coded) then you must resubmit. You can resubmit several times if need be, until the cutoff deadline.
  • The cutoff deadline is absolute: it is the last possible date to hand in your solutions. If your solutions are not passed you get no further chances this term.
  • For questions about Fire administration (such as deadline extensions) please contact Oskar on Slack.
  • If you want to do a project instead of labs 4 and 5, then send Dave your proposal on Slack by Wednesday 2 December (week 5), one week before the Lab 4 deadline, so that you still have time to do Lab 4 if the proposal is not accepted. If it is accepted, submit the project in the Project assignment in Canvas (not Fire), by the Lab 5 deadline (Wednesday 16 December). It is graded orally (over zoom) later that week by arrangement.
Lab Part Submission deadline Cutoff deadline
Lab 1 Thursday, Week 1
(2026-11-05)
Friday, Week 2
(2026-11-13)
Lab 2 A Wednesday, Week 2
(2026-11-11)
Friday, Week 4
(2026-11-27)
B Wednesday, Week 3
(2026-11-18)
Lab 3 A Wednesday, Week 4
(2026-11-25)
Friday, Week 6
(2026-12-11)
B Wednesday, Week 5
(2026-12-02)
Lab 4 Wednesday, Week 6
(2026-12-09)
Friday, Week 7
(2026-12-18)
Lab 5 Wednesday, Week 7
(2026-12-16)

 

2027-01-08

>

Course summary:

Course Summary
Date Details Due