On July 30th, 2024, due to an important database update, there will be service interruptions in the Student Self-Service and Workforce Management areas between 8 AM and 11 AM. Thank you for your understanding.

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.

2024S, VU, 2.0h, 3.0EC, to be held in blocked form
TUWEL

Properties

  • Semester hours: 2.0
  • Credits: 3.0
  • Type: VU Lecture and Exercise
  • Format: Presence

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

References

Appendix

  • 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 23.
    • 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

  1. Guided self-dependent learning and practicing: 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: Presenting, explaining, comparing, contrasting, and rating own and others solutions of assignments in tutor-guided tutorials.
  3. Self-assessment tests: 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

Immanent

Additional information

The lecture course is planned in principle with in-person meetings. In case that this is not or no longer be possible due to new COVID-19 restrictions, the lecture course as well as the complementary tutorials will be continued online (Zoom) in terms of real-time video conferences in order to preserve the advantages of the directness of in-person course meetings to the largest possible extent.

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 (15.75h)
    • Lecture: 7.0h (7 units * 1.0h)
    • Flipped classroom: 3.5h (7 units * 0.5h)
    • Tutorials: 5.25h (7 units * 0.75h)
  • Independent learning activities (56.75h)
    • 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: 27.0h (Guide value: 3 Assignments * 3.0h, 1 Project * 18.0h)
    • Project demo and oral exam preparation: 1.75h
  • Assigment (`correction in person´) and project demo (4 * 0.5h): 2.0h
  • Oral exam: 0.5h

The kick-off course meeting and the first lecture take place on
Thursday, 7 March 2024, from 4.15 pm to 5.45 pm, EI 4 Reithoffer HS.

Lecturers

Institute

Course dates

DayTimeDateLocationDescription
Thu16:00 - 18:0007.03.2024 - 06.06.2024EI 4 Reithoffer HS 185.A05 Advanced Functional Programming
Tue13:00 - 14:0019.03.2024 - 18.06.2024Seminarraum FAV 01 A (Seminarraum 183/2) LVA 185.A03 Advanced Functional Programming (Tutorial)
Advanced Functional Programming - Single appointments
DayDateTimeLocationDescription
Thu07.03.202416:00 - 18:00EI 4 Reithoffer HS 185.A05 Advanced Functional Programming
Thu14.03.202416:00 - 18:00EI 4 Reithoffer HS 185.A05 Advanced Functional Programming
Tue19.03.202413:00 - 14:00Seminarraum FAV 01 A (Seminarraum 183/2) LVA 185.A03 Advanced Functional Programming (Tutorial)
Thu21.03.202416:00 - 18:00EI 4 Reithoffer HS 185.A05 Advanced Functional Programming
Tue09.04.202413:00 - 14:00Seminarraum FAV 01 A (Seminarraum 183/2) LVA 185.A03 Advanced Functional Programming (Tutorial)
Thu11.04.202416:00 - 18:00EI 4 Reithoffer HS 185.A05 Advanced Functional Programming
Tue16.04.202413:00 - 14:00Seminarraum FAV 01 A (Seminarraum 183/2) LVA 185.A03 Advanced Functional Programming (Tutorial)
Thu18.04.202416:00 - 18:00EI 4 Reithoffer HS 185.A05 Advanced Functional Programming
Tue23.04.202413:00 - 14:00Seminarraum FAV 01 A (Seminarraum 183/2) LVA 185.A03 Advanced Functional Programming (Tutorial)
Thu25.04.202416:00 - 18:00EI 4 Reithoffer HS 185.A05 Advanced Functional Programming
Tue30.04.202413:00 - 14:00Seminarraum FAV 01 A (Seminarraum 183/2) LVA 185.A03 Advanced Functional Programming (Tutorial)
Thu02.05.202416:00 - 18:00EI 4 Reithoffer HS 185.A05 Advanced Functional Programming
Tue07.05.202413:00 - 14:00Seminarraum FAV 01 A (Seminarraum 183/2) LVA 185.A03 Advanced Functional Programming (Tutorial)
Tue14.05.202413:00 - 14:00Seminarraum FAV 01 A (Seminarraum 183/2) LVA 185.A03 Advanced Functional Programming (Tutorial)
Thu16.05.202416:00 - 18:00EI 4 Reithoffer HS 185.A05 Advanced Functional Programming
Thu23.05.202416:00 - 18:00EI 4 Reithoffer HS 185.A05 Advanced Functional Programming
Tue28.05.202413:00 - 14:00Seminarraum FAV 01 A (Seminarraum 183/2) LVA 185.A03 Advanced Functional Programming (Tutorial)
Tue04.06.202413:00 - 14:00Seminarraum FAV 01 A (Seminarraum 183/2) LVA 185.A03 Advanced Functional Programming (Tutorial)
Thu06.06.202416:00 - 18:00EI 4 Reithoffer HS 185.A05 Advanced Functional Programming
Tue11.06.202413:00 - 14:00Seminarraum FAV 01 A (Seminarraum 183/2) LVA 185.A03 Advanced Functional Programming (Tutorial)
Course is held blocked

Examination modalities

  • Four graded submissions of (smaller) programming assignments.

  • One graded submission and demo of a (larger) project assignment.

  • One graded 30 minute oral examination about lecture and tutorial topics and documents.

There are no other graded assessments.

Course registration

Begin End Deregistration end
30.01.2024 01:00 08.03.2024 12:00 22.03.2024 12:00

Group Registration

GroupRegistration FromTo
FFP 107.03.2024 01:0015.03.2024 12:00
FFP 207.03.2024 01:0015.03.2024 12:00
FFP 307.03.2024 01:0015.03.2024 12:00
FFP 407.03.2024 01:0015.03.2024 12:00
FFP 507.03.2024 01:0015.03.2024 12:00
FFP 607.03.2024 01:0015.03.2024 12:00
FFP 707.03.2024 01:0015.03.2024 12:00
FFP 807.03.2024 01:0015.03.2024 12:00
FFP 907.03.2024 01:0015.03.2024 12:00
FFP 1007.03.2024 01:0015.03.2024 12:00
FFP 1107.03.2024 01:0015.03.2024 12:00
FFP 1207.03.2024 01:0015.03.2024 12:00
FFP 1307.03.2024 01:0015.03.2024 12:00
FFP 1407.03.2024 01:0015.03.2024 12:00
FFP 1507.03.2024 01:0015.03.2024 12:00
FFP 1607.03.2024 01:0015.03.2024 12:00
FFP 1707.03.2024 01:0015.03.2024 12:00
FFP 1807.03.2024 01:0015.03.2024 12:00
FFP 1907.03.2024 01:0015.03.2024 12:00
FFP 2007.03.2024 01:0015.03.2024 12:00
FFP 2107.03.2024 01:0015.03.2024 12:00
FFP 2207.03.2024 01:0015.03.2024 12:00
FFP 2307.03.2024 01:0015.03.2024 12:00
FFP 2407.03.2024 01:0015.03.2024 12:00
FFP 2507.03.2024 01:0015.03.2024 12:00
FFP 2607.03.2024 01:0015.03.2024 12:00
FFP 2707.03.2024 01:0015.03.2024 12:00
FFP 2807.03.2024 01:0015.03.2024 12:00
FFP 2907.03.2024 01:0015.03.2024 12:00
FFP 3007.03.2024 01:0015.03.2024 12:00
FFP 3107.03.2024 01:0015.03.2024 12:00
FFP 3207.03.2024 01:0015.03.2024 12:00
FFP 3307.03.2024 01:0015.03.2024 12:00
FFP 3407.03.2024 01:0015.03.2024 12:00
FFP 3507.03.2024 01:0015.03.2024 12:00
FFP 3607.03.2024 01:0015.03.2024 12:00
FFP 3707.03.2024 01:0015.03.2024 12:00
FFP 3807.03.2024 01:0015.03.2024 12:00
FFP 3907.03.2024 01:0015.03.2024 12:00
FFP 4007.03.2024 01:0015.03.2024 12:00
Tutorial Group 1 (Fri, 11-12am)25.03.2024 16:0003.04.2024 23:59
Tutorial Group 2 (Fri, 11-12am)25.03.2024 16:0003.04.2024 23:59

Curricula

Study CodeObligationSemesterPrecon.Info
066 931 Logic and Computation Mandatory elective
066 937 Software Engineering & Internet Computing Mandatory elective

Literature

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

Miscellaneous

Language

if required in English