Course "Introduction to Functional Programming" SS 2017

This course is mandatory for BSc Computer Science.

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


  • Lecturer: Prof. Dr. Ralf Lämmel
  • Lab assistant: Marcel Heinz <ed.znelbok-inu|znieh#ed.znelbok-inu|znieh>
  • Assignment assistant: Matthias Paul <ed.znelbok-inu|luapm#ed.znelbok-inu|luapm>

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 course is heavily sample- and wiki-based while the chrestomathy of the 101companies:Project provides many of the underlying resources. Links to extra resources such as Wikipedia, the Haskell wiki, and online textbooks are provided.



See lecture material on 101wiki. "Regular labs" go through solutions for previously completed assignments and discuss briefly the upcoming assignments. Because of the lecturer's sabbatical, some of the lectures will be supported by videos (to be studied ahead of class) so that the actual lecture slots may be used for "flipped class room" or a more lab-like approach.

  • Lecture: Fridays 12:15-13:45, D 028
  • Lab: Mondays 16-18
  • Exam: last lecture slot; same room; same time; register via KLIPS
  • Resit: end of next semester
Date Topic Wiki PDF
21.04.2017 No lecture - -
24.04.2017 No lab - -
28.04.2017 Lecture: First steps link link
05.05.2017 Lecture: Basic software engineering link link
08.05.2017 Lab: Basic Functions and Concepts link link
12.05.2017 Lecture: Searching and sorting link link
15.05.2017 Lab link link
19.05.2017 Lecture: Basic data modeling link link
22.05.2017 Lab link -
26.05.2017 Lecture: Higher-order functions link link
29.05.2017 Lab link -
02.06.2017 Lecture: Type-class polymorphism link link
12.06.2017 Lab link -
16.06.2017 Lecture: Functors and friends link link
19.06.2017 Lab link -
23.06.2017 Lecture: Functional data structures link link
26.06.2017 Lab - -
30.06.2017 Lecture: Unparsing and parsing link link
03.07.2017 Lab - -
10.07.2017 Lab - -
14.07.2017 Lecture: Monads link link
17.07.2017 Lab: Preparation exam - -
21.07.2017 Exam - -


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). (You are notified once your folder was created.) 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 student folders on the date of issue and have to be completed and committed by the deadline (End of Day). 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 05.05.2017 11.05.2017 Basic software engineering
2 12.05.2017 18.05.2017 Searching and sorting
3 19.05.2017 25.05.2017 Basic data modeling
4 26.05.2017 01.06.2017 Higher-order functions
5 02.06.2017 15.06.2017 Type-class polymorphism
6 16.06.2017 22.06.2017 Functors and friends
7 23.06.2017 29.06.2017 Functional data structures
8 30.06.2017 06.07.2017 Parsing
9 07.07.2017 13.07.2017 Unparsing (pretty printing)

Exam admission rules

Students need to pass homework assignments as follows:

  • Successful exam admission from the previous editions implies admission this time around.
  • Students submit individual submissions for the assignments.
  • Submission must arrive by the deadline (End of Day). 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 solution in a proper manner 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, which are directly inherited from the topics for the lectures, define directly the topics for the exam. There is going to be 9 tasks in the exam, one task per lecture/assignment topic. Each exam task received 0-2 points.