Functional Programming (2023)

Important Note

This year the lecture will start one week later than the start of the lecture period (On the 25th of April).

Organization

Instructor: Prof. Ralf Hinze

Teaching assistant: Michael Youssef

Lecture

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

(for details see KIS)

Exercises

  • Thursday, 11:45 - 13:15, 48-453 (starting on May 4th)

(for details see KIS)

The lecture and course material will be in English.

Registration

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

Exams

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