Course "Introduction to Functional Programming" SoSe2019

This course is mandatory for BSc Computer Science.

Students of other curricula may choose this course; please check your curriculum.


  • Lecturer: PD. Dr. Stefan Bosse
  • Lab assistant: M.Sc. Informatik Marcel Heinz <ed.znelbok-inu|znieh#ed.znelbok-inu|znieh>
  • Assignment assistant: Kevin Klein <ed.znelbok-inu|nielkk#ed.znelbok-inu|nielkk>

Synopsis and format

See the official (timeless) synopsis for this module in the curriculum. The following text is closely tied to the specific edition. See the general course site for additional material, e.g., pointers to applicable textbooks for those interested. The course introduces the functional programming paradigm with the Haskell programming language as the primary language throughout the course. The course covers basics of functional programming (functions, datatypes, list processing, higher-order functions, etc.), functional design of data structures and algorithms, more advanced, mathematically influenced concepts (such as monoids, monads, and functors), selected programming techniques around data processing (e.g., generic programming) and basic software engineering methods for functional programs (e.g., modularization, documentation, testing, and packaging).




The assignments are designed to help understand all material covered in the lecture. Also, the assignments support effective preparation for the exam. Issued assignments may be discussed briefly in the lecture or the lab. Solved assignments are discussed in detail in the lab. Each student has a folder at (replace username by your Uni-specific username). The text of the assignment for each option is part of a source file providing a skeleton for the solution. These files are put into the public assignment folder on the date of issue by the assignment assistant. The folder has to be moved and committed to personal student folders and have to be completed and committed by the deadline. Thus, students are only supposed to modify the given file and not create new files. The assignment assistant checks submitted solutions.

The “topic” in the following table is linked to the assignment, once it is published. Students also find the assignment in their folders, as described above.

No. Date of issue Deadline Topic
1 15.04.2019 26.04.2019 23:59 Basic functions
2 26.04.2019 03.05.2019 23:59 Matrix Transposition
3 03.05.2019 10.05.2019 23:59 Higher Order Functions
4 10.05.2019 17.05.2019 23:59 Decode
5 17.05.2019 24.05.2019 23:59 Polymorphism
6 24.05.2019 31.05.2019 23:59 Algebraic Data Types
7 31.05.2019 07.06.2019 23:59 Type Classes
8 07.06.2019 21.06.2019 23:59 Abstract Data Types
9 21.06.2019 28.06.2019 23:59 Sorting
10 28.06.2019 05.07.2019 23:59 Algebraic Data Types
11 05.07.2019 12.07.2019 23:59 Trees
12 16.07.2019 22.07.2019 23:59 Functors
13 16.07.2019 22.07.2019 23:59 Algorithms

Exam admission rules

Students need to pass homework assignments as follows:

  • Admission from previous years is inherited.
  • Students submit individual submissions for the assignments.
  • Submission must arrive by the deadline. Late submissions are not graded.
  • 7 submissions need to receive a score 1 or better.
  • 5 submissions need to receive a score 2.
  • Students need to register for exam via KLIPS.

Scores: Missing or useless or late submissions receive score 0. Submissions which are essentially correct and complete and meet essentially all additional software engineering requirements (e.g., regarding testing), modulo smaller problems, receive score 2. Submissions which show the noteworthy beginning of a proper solution but are definitely incorrect or incomplete or violate software engineering requirements receive score 1.

Relation between lecture, assignments, and exam: The topics of the assignments and labs, which are directly inherited from the topics for the lectures, define directly the topics for the exam. There is going to be 10 tasks in the exam, one task per lecture/assignment topic. Each exam task received 0-2 points.