Course "Introduction to Functional Programming" SS 2015

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>
  • 101wiki 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 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.

Some lectures may be covered by code transcripts on the public svn.

Date Topic
23.04.2015 First steps
30.04.2015 Basic software engineering
07.05.2015 Searching and sorting
21.05.2015 Basic data modeling
05.06.2015 Higher-order functions
11.06.2015 Type-class polymorphism
18.06.2015 Functional data structures
25.06.2015 Functors and friends
02.07.2015 Unparsing and parsing
09.07.2015 Monads
16.07.2015 Generic functions
23.07.2015 Final


Date Topic
24.04.2015 Kickoff
08.05.2015 Prelude/Simple functions
15.05.2015 Binary search/Binary search trees
22.05.2015 Abstract Data Types
12.06.2015 Higher Order Functions & Type Classes
19.06.2015 Functor & Foldable
26.06.2015 Functional Data Structures vs. Type Classes
03.07.2015 Parsing and Unparsing
10.07.2015 Monads
17.07.2015 Exam Preparation
24.07.2015 Post-exam review

"Regular labs" go through solutions for previously completed assignments and discuss briefly the upcoming assignments.


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. Completed assignments are discussed in detail in the lab. Students may be asked to present their solutions. The assignment assistant checks submitted solutions. Each student has a folder at (You are notified once your folder was created.) Each assignment possibly offers multiple options. 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). If there are multiple options for an assignment your score will be the maximum of your scores for each of the individual options.

No. Date of issue Deadline
1 08.05.2015 14.05.2015
2 15.05.2015 21.05.2015
3 22.05.2015 04.06.2015
4 05.06.2015 11.06.2015
5 12.06.2015 18.06.2015
6 19.06.2015 25.06.2015
7 26.06.2015 02.07.2015
8 03.07.2015 09.07.2015
9 10.07.2015 16.07.2015
10 17.07.2015 21.07.2015

Exam admission rules

Students need to pass homework assignments as follows:

  • Successful exam admission from the previous two 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.