Functional Programming


  • 2018-06-28: You can find the points for exercise sheet 8 in the file in your team’s repository. Comments for your solutions are in ex8/ This was the last sheet. All teams got their admission. The last exercise session is on Monday July 2nd, there we will discuss sheet 8.
  • 2018-06-27: Reminder: Exam dates are July 17th - 19th. Please contact our secretary for an appointment, she will be back from holidays on Monday July 2nd. Remember that you need to register your exam in the examination office two weeks in advance, so get your appointment on Monday! Retaking failed exams is possible on October 9th + 10th.
  • 2018-06-06: Oral exams are July 17th - 19th. Please contact our secretary for an appointment.


Instructor: Prof. Ralf Hinze

Teaching assistant: Sebastian Schweizer, M.Sc.


Lectures start on Wednesday, May 2nd.

  • Tuesday, 10:00 - 11:30, Room 52-207
  • Tuesday, 15:30 - 17:00, Room 46-280
  • Wednesday, 10:00 - 11:30, Room 42-105. On June 13th, the lecture is in 86-107.

(for details see KIS)

You can find the lecture slides in the lecture-material repository on GitLab.


  • Monday, 11:45 - 13:15, Room 48-379, starting on May 7th
  • In order to make up for the holiday on Monday May 21st, there is an additional session on Friday May 18th, 13:45 - 15:15, Room 11-207

(for details see KIS)

The lecture and course material will be in English.

Weekly exercise sheets will be provided on Wednesdays (starting on May 2nd). The solutions must be submitted by 10am on the following Wednesday and will be discussed in the next exercise session.


  • Oral exams: July 17th - 19th. Please contact our secretary for an appointment.
  • Dates to repeat failed exams: October 9th + 10th.
  • Admission requirement: obtain a sufficient grade for at least 75% of the exercises

Topics of the Lecture

Functional programming is a style of programming that emphasises the use of immutable datatypes and pure functions. Functional programming has a simple mathematical basis that supports equational reasoning about properties of programs. As a consequence, functional programs are easier to develop and reason about than their imperative counterparts. The aim of these lectures is to illustrate these points using the standard functional language Haskell.

  • Programming with expressions and values: computation by evaluation, evaluation orders, problem solving in Haskell
  • Types and polymorphism: static typing, polymorphic functions, type-driven program development
  • Lists and list-processing functions: pattern matching, compositional programming, list comprehensions
  • Algebraic datatypes: recursive datatypes, patterns of definition, data structures
  • Higher-order functions: lambda expressions, currying, recursion schemes, domain-specific languages
  • Type classes: making ad-hoc polymorphism less ad hoc, map-reduce, constructor classes
  • Reasoning and calculating: equational reasoning, induction, program synthesis, program fusion
  • Lazy evaluation: evaluation orders, dynamic programming, infinite data structures
  • Imperative Programming: Haskell: the world’s finest imperative language
  • Applicative functors and monads: APIs of the future
  • Type and class system extensions: nested datatypes, type families, rank-2 types
  • Generic programming: folds and unfolds, algorithmic duality