Course "Introduction to Functional Programming" SS 2014

This course is mandatory for BSc Computer Science.

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


  • Lecture: Prof. Dr. Ralf Lämmel
  • Lab: Andrei Varanovich
  • Hiwis: Philipp Schuster and Tim Budweg

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.




  • 19 Feb, 12:15pm, K 101



See lecture material on 101wiki.

Date Topic
24.04.2014 First steps
08.05.2014 Basic software engineering
15.05.2014 Searching and sorting
22.05.2014 Basic data modeling
05.06.2014 Higher-order functions
26.06.2014 Type-class polymorphism
03.07.2014 Functional data structures
10.07.2014 Functors and friends
17.07.2014 Unparsing and parsing
24.07.2014 Exam preperation
31.07.2014 Final


Date Topic
02.05.2014 Kickoff
09.05.2014 Regular lab
16.05.2014 Regular lab
23.05.2014 Regular lab
30.05.2014 Regular lab
06.06.2014 Regular lab
20.06.2014 Regular lab
27.06.2014 Regular lab
04.07.2014 Regular lab
11.07.2014 Regular lab
18.07.2014 Regular lab
25.07.2014 Presentation for last assignment
01.08.2014 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. There are student assistants who check submitted solutions. Each student has a folder at Each assignment consists of one or more options represented by an incomplete source file. These files are pushed to 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 02.05.2014 08.05.2014
2 09.05.2014 15.05.2014
3 16.05.2014 22.05.2014
4 23.05.2014 29.05.2014
5 30.05.2014 05.06.2014
6 freebie freebie
7 20.06.2014 26.06.2014
8 27.06.2014 03.07.2014
9 04.07.2014 10.07.2014
10 11.07.2014 17.07.2014
11 18.07.2014 24.07.2014

Exam admission rules

Students need to pass homework assignments as follows:

  • Successful exam admission from the previous edition 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.
  • Each student presents at least twice successfully in the lab.
  • 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 beginning of a solution in a proper manner but are non-trivially incorrect or incomplete or violate software engineering requirements receive score 1.