185.A05 Advanced Functional Programming
This course is in all assigned curricula part of the STEOP.
This course is in at least 1 assigned curriculum part of the STEOP.

2021S, VU, 2.0h, 3.0EC, to be held in blocked form
Lecture TubeTUWEL


  • Semester hours: 2.0
  • Credits: 3.0
  • Type: VU Lecture and Exercise
  • LectureTube course
  • Format: Distance Learning

Learning outcomes

After successful completion of the course, students are able to (among others)

  • describe, explain, and demonstrate advanced principles and concepts of functional programming and their application in practice.
  • explicate the theoretical and practical foundations of functional programming, and to apply them for verifying and validating the correctness of functional programs.
  • identify, discuss, and demonstrate in detail benefits and limitations of a (pure) functional programming style.
  • solve programming tasks from small to medium size and complexity using basic and advanced concepts and principles of functional programming adequately and professionally.

Subject of course

The course is concerned with advanced concepts and principles of
functional programming and their applications. The lecture part of the
course stretches from functional programming principles to quality
assurance, advanced languages concepts, and applications. Regularly
assigned exercises of the tutorial part of the course give a hands-on
experience of applying the concepts and principles to problems of
suitable kind, size and complexity to get to a profound understanding
of them in theory and practice.

Part I: Motivation

  • Why Functional Programming Matters

Part II: Programming Principles

  • Programming with Streams
  • Programming with Higher-Order Functions
  • Equational Reasoning
  • Functional Pearls

Part III: Quality Assurance

  • Testing
  • Verification

Part IV: Advanced Language Concepts

  • Abstract Data Types
  • Functional Arrays
  • Monoids
  • Functors
  • Applicatives
  • Monads
  • Arrows

Part V: Applications

  • Parsing
  • Logical Programming Functionally
  • Pretty Printing
  • Functional Reactive Programming

Part VI: Extensions and Prospectives

  • Extensions for Parallel and Real World Programming
  • Conclusions and Prospectives



  • Mathematical Foundations

Selected Reading Recommendations

  • Basic
    • Jens Knoop. Slides and companion material of the course `LVA 185.A03 Funktionale Programmierung.' Compilers and Languages Group, TU Vienna, WS 2020/2021.
    • Simon Thompson. Haskell: The Craft of Functional Programming. Addison-Wesley/Pearson, 3rd edition, 2011.
    • Richard Bird. Thinking Functionally with Haskell. Cambridge University Press, 2015.
    • Greg Michaelson. An Introduction to Functional Programming through Lambda Calculus. Dover Publications, 2nd edition, 2011.
    • Peter Pepper, Petra Hofstedt. Funktionale Programmierung: Sprachdesign und Programmiertechnik. Springer-V., 2006.
    • Simon Peyton Jones (Ed.). Haskell 98: Language and Libraries. The Revised Report. Cambridge University Press, 2003.
  • Advanced
    • Jeremy Gibbons, Oege de Moor (Eds.) The Fun of Programming. Palgrave Macmillan, 2003.
    • Bryan O'Sullivan, John Goerzen, Don Stewart. Real World Haskell. O'Reilly, 2008.
    • Tomas Petricek, Jon Skeet. Real World Functional Programming: With Examples in F# and C#. Manning Publications Co., 2009.
    • Chris Okasaki. Purely Functional Data Structures. Cambridge University Press, 1999.
    • Aaron Stump. Verified Functional Programming in Agda. ACM Books Series, No. 9, 2016.
    • Lectures on `Advanced Functional Programming.' International Summer Schools 1995, 1996, 1998, 2002; Springer-V., LNCS volumes 925, 1129, 1608, 2638.

Teaching methods

According to current COVID-19 restrictions and directives of the vice rectorate for academic affairs and the dean's office of academic affairs from January 26 abd January 31, 2021, the lecture course 185.A05 Advanced Functional Programming is exclusively held online. The advantages of the directness of face-to-face course meetings shall be preserved to the largest possible extent. All course and tutorial meetings will thus be held as real-time video conferences.

  1. Guided self-dependent learning and practicing (online only): Guided by means of lecture and flipped classroom sessions, the self-dependent learning and practicing of the competencies described in the learning outcomes utilizing lecture notes, theoretical and practical exercises, and further self-reliantly chosen material from text books, tutorials, and scientific articles proposed for further reading.
  2. Role model and feedback-oriented learning (online only): Presenting, explaining, comparing, contrasting, and rating own and others solutions of assignments in tutor-guided tutorials.
  3. Self-assessment tests (online and offline, no physical presence): Tests supporting the regular self-assessment and self-reflection of one's own progress and success of learning; central and control questions.

Mode of examination


Additional information

ECTS Break Down:

The course is assigned 3.0 ECTS points. This corresponds to an average
workload of 75 hours. This average workload is divided among the
various learning activities of the course as follows (the descriptions Part I to Part VI refer to the respective parts of the course notes):

  • Guided learning activities (exclusively online, 17.5h)
    • Lecture: 7.0h (7 units * 1.0h)
    • Flipped classroom: 3.5h (7 units * 0.5h)
    • Tutorials: 7.0h (7 units * 1.0h)
  • Independent learning activities (studying from home, 56.5h)
    • Self-dependent acquirement of learning outcomes: 28.0h (Guide value: Part I/1.0h, Part II/6.0h, Part III/6.0h, Part IV/7.0h, Part V/7.0h, Part VI/1.0h)
    • In particular: Solving assignments: 24.5h (Guide value: 4 Assignments * 3.0h, 1 Project * 15.5h)
    • Project demo and oral exam preparation: 1.0h
  • Project demo (exclusively online, video presence): 0.5h
  • Oral exam (exclusively online, face-to-face video presence): 0.5h

The preliminary course meeting and the first lecture take place on
Thursday, 4 March 2021, from 4.15 pm to 6.00 pm (inclusive of a 15min break) via Zoom. The Zoom link has been posted as a TISS message on 1 March 2021; it can also be found on the news board for course news in TISS and in the complementary TUWEL course.



Examination modalities

  • Online/offline, without physical presence: Four rated submissions of (smaller) programming assignments.

  • Online, video presence: One rated submission and demo of a (larger) project assignment.

  • Online, video presence: One rated 30 minute oral examination about lecture and tutorial topics and documents (consensually, the oral exam can be replaced by an equivalent oral exam on-site, if the then valid COVID rules should allow this).

There are no other rated assessments.

Required technical equipment: Stable Internet connection, internet connectable device with audio/video receiver and transmitter.

Course registration

Begin End Deregistration end
29.01.2021 01:00 12.03.2021 12:00 26.03.2021 12:00

Group Registration

GroupRegistration FromTo
FFP 104.03.2021 01:0012.03.2021 12:00
FFP 204.03.2021 01:0012.03.2021 12:00
FFP 304.03.2021 01:0012.03.2021 12:00
FFP 404.03.2021 01:0012.03.2021 12:00
FFP 504.03.2021 01:0012.03.2021 12:00
FFP 604.03.2021 01:0012.03.2021 12:00
FFP 704.03.2021 01:0012.03.2021 12:00
FFP 804.03.2021 01:0012.03.2021 12:00
FFP 904.03.2021 01:0012.03.2021 12:00
FFP 1004.03.2021 01:0012.03.2021 12:00
FFP 1104.03.2021 01:0012.03.2021 12:00
FFP 1204.03.2021 01:0012.03.2021 12:00
FFP 1304.03.2021 01:0012.03.2021 12:00
FFP 1404.03.2021 01:0012.03.2021 12:00
FFP 1504.03.2021 01:0012.03.2021 12:00
FFP 1604.03.2021 01:0012.03.2021 12:00
FFP 1704.03.2021 01:0012.03.2021 12:00
FFP 1804.03.2021 01:0012.03.2021 12:00
FFP 1904.03.2021 01:0012.03.2021 12:00
FFP 2004.03.2021 01:0012.03.2021 12:00
FFP 2104.03.2021 01:0012.03.2021 12:00
FFP 2204.03.2021 01:0012.03.2021 12:00
FFP 2304.03.2021 01:0012.03.2021 12:00
FFP 2404.03.2021 01:0012.03.2021 12:00
FFP 2504.03.2021 01:0012.03.2021 12:00
FFP 2604.03.2021 01:0012.03.2021 12:00
FFP 2704.03.2021 01:0012.03.2021 12:00
FFP 2804.03.2021 01:0012.03.2021 12:00
FFP 2904.03.2021 01:0012.03.2021 12:00
FFP 3004.03.2021 01:0012.03.2021 12:00
FFP 3104.03.2021 01:0012.03.2021 12:00
FFP 3204.03.2021 01:0012.03.2021 12:00
FFP 3304.03.2021 01:0012.03.2021 12:00
FFP 3404.03.2021 01:0012.03.2021 12:00
FFP 3504.03.2021 01:0012.03.2021 12:00
FFP 3604.03.2021 01:0012.03.2021 12:00
FFP 3704.03.2021 01:0012.03.2021 12:00
FFP 3804.03.2021 01:0012.03.2021 12:00
FFP 3904.03.2021 01:0012.03.2021 12:00
FFP 4004.03.2021 01:0012.03.2021 12:00
Tutorial Group 1 (Fri, 11-12am)22.03.2021 16:0031.03.2021 23:59
Tutorial Group 2 (Fri, 11-12am)22.03.2021 16:0031.03.2021 23:59



No lecture notes are available.

Previous knowledge

Basic knowledge of the functional programming paradigm as
e.g. imparted in the course LVA 185.A03 "Funktionale Programmierung"
is mandatory.

Preceding courses

Accompanying courses



if required in English