Computer Science

Faculty of Engineering, LTH

Denna sida på svenska This page in English

EDAF40/EDAN40 Syllabus


With mainstream programming languages we understand programs by understanding how the computer sequentially executes the program. Functional programming represents a different approach to programming. By interpreting variables in the mathematical sense the program semantics can be understood by simple rewrite rules. Higher order functions become natural building blocks, and you can work with infinite data structures. As a consequence, programs can be made much shorter and easier to understand. The importance of functional programming is further elaborated in the essay Why functional programming matters.

This course aims to make functional techniques and thought patterns part of your programming repertoire. In order to establish these skills the course emphasizes practical programming exercises using the functional language Haskell. Not only do they exercise programming with a more mathematical mindset, they also demonstrate how functional programming can be used in some practical applications.


Programming, Algorithms and data structures (e.g., EDAA01 suffices).
Additional recommendation: Mathematics 25 ECTS

Course structure

During the two weeks of the course you will get acquainted with the Haskell language, primarily by yourself, using any of the tutorials or textbooks available. Some possibilities are listed on the Literature and links page. This phase will be supported by the first four lectures and the first class.

Then the main part of the course begins. It consists of three programming assignments.

A number of lectures will be given throughout the course on topics needing a more in-depth treatment. See the lecture material page for more details. Generally speaking, common (EDAF95 and EDAN40) lectures focus more on practice of functional programming, while the extra four (EDAN40 only) augment it with the necessary theory and higher-level concepts.

Aditionally, there will be three class sessions (common to both courses) devoted to practical exercises and problem solving on several course topics. See the class page for details.


To pass on this course you need to have three assignments approved. Deadlines are strict in the sense that solutions which are handed in too late will be disregarded unless an agreement has been made in advance with a teacher. Obviously inadequate solutions will also fail immediately.

Moreover, there will be a written exam at the end of the course. The earlier exams may be found on the exams page.

The written (modulo corona) exam will take place on June 1st, 2020. Reexam will be held at 8-13 on August 28th, 2020.

Literature and online resources

A couple of possible textbooks for this course, together with more reading hints, can be found on the literature and links page.

You will (hopefully:-) also study various papers and manuals which accompany the libraries used in the programming assignments.

Teaching days

Lectures: normally Mondays, 13-15 and Wednesdays 13-15, with exceptions.
Classes: Thursdays, weeks 2, 4 and 6.