Functional Programming (2019)

News

  • 2020-02-03: The next exam date is March 11th 2020. Please write an email to Sebastian for an appointment and don’t forget to register the exam at your examination office at least two weeks in advance.
  • 2019-08-19: The next exam dates are October 22nd and 23rd 2019. Please write an email to Sebastian for an appointment and don’t forget to register the exam at your examination office at least two weeks in advance.
  • 2019-06-27: Exercise sheet 9 is available in your team’s repository (ex9/ex9.pdf).
  • 2019-05-22: The exam dates are July 15th - 18th. Please write an email to Sebastian for an appointment and don’t forget to register the exam at your examination office at least two weeks in advance.
  • 2019-04-18: Everyone who has not yet access to our GitLab server (repositories FP19/lecture-material and FP19/teamX where X is your team number) or has missed the registration deadline please immediately contact me.
  • 2019-04-17: The slides for the first week and the first exercise sheet are available.
  • 2019-04-16: Please register for the exercises by Thursday, April 18th, 12:00 noon.

Organization

Instructor: Prof. Ralf Hinze

Teaching assistant: Sebastian Schweizer, M.Sc.

Lecture

  • Tuesday, 15:30 - 17:00, Room 46-280
  • Wednesday, 10:00 - 11:30, Room 42-105

(for details see KIS)

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

Exercises

  • Thursday, 11:45 - 13:15, Room 48-453 (starting on April 18th)

(for details see KIS)

The lecture and course material will be in English.

Weekly exercise sheets will be provided on Wednesdays (starting on April 17th). The solutions must be submitted by 12 noon on the following Tuesday and will be discussed in the next exercise session.

Registration

In order to take this course you need to register for the exercises. Please form teams of 3 - 4 students each. Send an email including your name, contact email address, matrikulation number, as well as the names of your teammates (names only) to Sebastian. The registration deadline is Thursday, April 18th, 12:00 noon.

If you cannot find colleagues for a team then we will arrange something during the first exercise session.

Exams

  • Oral exams, July 15th - 18th
  • 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