Functional Programming (2022)


Instructor: Prof. Ralf Hinze

Teaching assistant: Michael Youssef


  • Tuesday, 12:00 - 13:30, 52-207 (starting on April 26th)
  • Wednesday, 10:00 - 11:30, 42-110

(for details see KIS)

The first lecture (Tuesday, April 26th) is online. You can find the URL in our OLAT course. Whether subsequent lectures will be online or on-site will be decided together with you during the first lecture. We decided to do the lectures on-site (starting April 27th).


  • Thursday, 12:00 - 13:30, 48-453 (starting on May 5th)

(for details see KIS)

The lecture and course material will be in English.

Weekly exercise sheets will be provided on Wednesdays (starting on May 4th).


Please join our OLAT course to register, deadline is April 30th.


Oral exams, details will be announced later.

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

Data protection notice

Zoom is used for the lectures. This is necessary because we are expecting over 100 participants and it can be assumed that this will overload other tools such as Jitsi or Mattermost. The use of Zoom is nevertheless voluntary, as we have asked the SCI to also offer the stream via their restreaming service. Questions that you would have asked via Zoom can be asked in the exercise sessions.