Functional Programming (2021)


Instructor: Prof. Ralf Hinze

Teaching assistant: Sebastian Schloßer, M.Sc.


  • Tuesday, 15:30 - 17:00, online (starting on April 20th)
  • Wednesday, 10:00 - 11:30, online

(for details see KIS)

The link to the online lecture as well as the lecture slides can be found in our OLAT course.


  • Thursday, 12:00 - 13:30, online (starting on April 22nd)

(for details see KIS)

The lecture and course material will be in English.

Weekly exercise sheets will be provided on Wednesdays (starting on April 28th).

The link to the online exercises as well as the exercise sheets can be found in our OLAT course.


Please join our OLAT course to register.


Oral exams, details will be announced later (in particular regarding the Corona situation).

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.