Course syllabus for Functional Programming: continuation course

Course syllabus adopted 2026-02-12 by Head of Programme (or corresponding).

Overview

  • Swedish nameFunktionell programmering, fortsättningskurs
  • CodeDAT600
  • Credits7.5 Credits
  • OwnerTKDAT
  • Education cycleFirst-cycle
  • Main field of studyComputer Science and Engineering, Software Engineering, Mathematics
  • DepartmentCOMPUTER SCIENCE AND ENGINEERING
  • GradingTH - Pass with distinction (5), Pass with credit (4), Pass (3), Fail

Course round 1

  • Teaching language English
  • Application code 49136
  • Open for exchange studentsYes

Credit distribution

0126 Written and oral assignments 3.5 c
Grading: UG
3.5 c
0226 Examination 4 c
Grading: TH
4 c

In programmes

Examiner

Information missing

Eligibility

General entry requirements for bachelor's level (first cycle)
Applicants enrolled in a programme at Chalmers where the course is included in the study programme are exempted from fulfilling the requirements

Specific entry requirements

The same as for the programme that owns the course
Applicants enrolled in a programme at Chalmers where the course is included in the study programme are exempted from fulfilling the requirements

Course specific prerequisites

The student should have successfully completed:
  • 7.5 credits in functional programming
  • 7.5 credits in discrete mathematics
  • 7.5 credits more in mathematics
  • 7.5 credits more in data structures

Aim

The course continues from an introductory functional programming background to more advanced functional programming techniques, with a focus on compositional program design and the algebraic datatypes and structures that enable it.

Learning outcomes (after completion of the course the student should be able to)

Knowledge and understanding:

  • Explain and apply fundamental abstractions in functional programming, including lazy/strict evaluation, functors, & monads, and describe how these abstractions can be used to handle state, exceptions, and I/O in a purely functional way.
  • Explain how algebraic properties such as associativity and commutativity enable divide-and-conquer and parallel evaluation in pure functional programs, and discuss how purity and referential transparency support the design of compositional embedded domain-specific languages (EDSLs).

Skills and abilities:

  • Design, structure, and implement functional programs and small EDSLs using appropriate type classes, algebraic operators, and data structures for efficient and, where appropriate, parallel computation.
  • Apply functional techniques such as recursion schemes, memoization, and algebraic composition to implement and reason about non-trivial algorithms.
  • Use relevant tools and libraries to develop, test, and document maintainable programs, including performance analysis and identification of common inefficiencies.
  • Structure and solve real-world programming problems in a functional style, integrating abstraction, testing, and reasoning for correctness and efficiency.

Judgement and approach:

  • Critically assess the suitability of abstractions and algebraic structures for specific programming problems, through reflection on the trade-offs between abstraction, performance, and resource use.
  • Evaluate program design decisions and correctness using property-based testing, algebraic properties, and equational reasoning.
  • Demonstrate responsibility in program design and collaboration, ensuring modularity, clear documentation, and maintainability.

Content

Students will study key abstractions such as lazy/strict evaluation, functors, monads and similar, and learn how these can be used to express effects like state, exceptions, and I/O in a purely functional way. The course also introduces methods for structuring larger functional systems, including the design of embedded domain-specific languages (EDSLs), the use of software transactional memory for safe concurrency, and techniques for parallel and efficient evaluation based on algebraic properties such as associativity and commutativity.

Lab work / programming assignments develop practical skills in designing, implementing, and reasoning about functional programs. Students gain experience with type classes, recursion schemes, and memoization, as well as relevant tools for building, testing, and documenting projects. Emphasis is placed on equational reasoning and property-based testing as means to achieve correctness and efficiency. Students learn to critically assess the trade-offs between abstraction and performance and to structure software in a modular, maintainable, and verifiable way.

Organisation

The main forms of instruction are lectures, seminars, case studies, and group work.

Language of instruction: English

Literature

To be determined and published well in advance of the course start, in accordance with current regulations.

Examination including compulsory elements

The course is examined by an individual written exam which is carried out in an examination hall at the end of the course and by written assignments carried out in groups.

The course examiner may assess individual students in other ways than what is stated above if there are special reasons for doing so, for example if a student has a decision from Chalmers about disability study support.

Functional Programming: continuation course | Chalmers