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.

2023S, 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: Hybrid

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 22.
    • 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 (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 (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 (due to limited room availabity possibly exclusively online, video presence): 0.5h
  • Oral exam: 0.5h

The preliminary course meeting and the first lecture take place on
Thursday, 1 March 2023, from 4.15 pm to 5.45 pm, EI 4 Reithoffer HS.

Lecturers

Institute

Course dates

DayTimeDateLocationDescription
Thu16:00 - 18:0002.03.2023 - 01.06.2023EI 4 Reithoffer HS 185.A05 Advanced Functional Programming
Wed12:00 - 13:0019.04.2023Seminarraum FAV 01 B (Seminarraum 187/2) 185.A05 Advanced Functional Programming - Tutorial
Fri11:00 - 12:0021.04.2023 - 09.06.2023Seminarraum FAV 01 B (Seminarraum 187/2) LVA 185.A03 Advanced Functional Programming (Tutorial)
Advanced Functional Programming - Single appointments
DayDateTimeLocationDescription
Thu02.03.202316:00 - 18:00EI 4 Reithoffer HS 185.A05 Advanced Functional Programming
Thu09.03.202316:00 - 18:00EI 4 Reithoffer HS 185.A05 Advanced Functional Programming
Thu16.03.202316:00 - 18:00EI 4 Reithoffer HS 185.A05 Advanced Functional Programming
Thu23.03.202316:00 - 18:00EI 4 Reithoffer HS 185.A05 Advanced Functional Programming
Thu30.03.202316:00 - 18:00EI 4 Reithoffer HS 185.A05 Advanced Functional Programming
Wed19.04.202312:00 - 13:00Seminarraum FAV 01 B (Seminarraum 187/2) 185.A05 Advanced Functional Programming - Tutorial
Thu20.04.202316:00 - 18:00EI 4 Reithoffer HS 185.A05 Advanced Functional Programming
Fri21.04.202311:00 - 12:00Seminarraum FAV 01 B (Seminarraum 187/2) LVA 185.A03 Advanced Functional Programming (Tutorial)
Thu27.04.202316:00 - 18:00EI 4 Reithoffer HS 185.A05 Advanced Functional Programming
Fri28.04.202311:00 - 12:00Seminarraum FAV 01 B (Seminarraum 187/2) LVA 185.A03 Advanced Functional Programming (Tutorial)
Thu04.05.202316:00 - 18:00EI 4 Reithoffer HS 185.A05 Advanced Functional Programming
Fri05.05.202311:00 - 12:00Seminarraum FAV 01 B (Seminarraum 187/2) LVA 185.A03 Advanced Functional Programming (Tutorial)
Thu11.05.202316:00 - 18:00EI 4 Reithoffer HS 185.A05 Advanced Functional Programming
Fri12.05.202311:00 - 12:00Seminarraum FAV 01 B (Seminarraum 187/2) LVA 185.A03 Advanced Functional Programming (Tutorial)
Thu25.05.202316:00 - 18:00EI 4 Reithoffer HS 185.A05 Advanced Functional Programming
Fri26.05.202311:00 - 12:00Seminarraum FAV 01 B (Seminarraum 187/2) LVA 185.A03 Advanced Functional Programming (Tutorial)
Thu01.06.202316:00 - 18:00EI 4 Reithoffer HS 185.A05 Advanced Functional Programming
Fri02.06.202311:00 - 12:00Seminarraum FAV 01 B (Seminarraum 187/2) LVA 185.A03 Advanced Functional Programming (Tutorial)
Fri09.06.202311:00 - 12:00Seminarraum FAV 01 B (Seminarraum 187/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
31.01.2023 01:00 10.03.2023 12:00 24.03.2023 12:00

Group Registration

GroupRegistration FromTo
FFP 102.03.2023 01:0010.03.2023 12:00
FFP 202.03.2023 01:0010.03.2023 12:00
FFP 302.03.2023 01:0010.03.2023 12:00
FFP 402.03.2023 01:0010.03.2023 12:00
FFP 502.03.2023 01:0010.03.2023 12:00
FFP 602.03.2023 01:0010.03.2023 12:00
FFP 702.03.2023 01:0010.03.2023 12:00
FFP 802.03.2023 01:0010.03.2023 12:00
FFP 902.03.2023 01:0010.03.2023 12:00
FFP 1002.03.2023 01:0010.03.2023 12:00
FFP 1102.03.2023 01:0010.03.2023 12:00
FFP 1202.03.2023 01:0010.03.2023 12:00
FFP 1302.03.2023 01:0010.03.2023 12:00
FFP 1402.03.2023 01:0010.03.2023 12:00
FFP 1502.03.2023 01:0010.03.2023 12:00
FFP 1602.03.2023 01:0010.03.2023 12:00
FFP 1702.03.2023 01:0010.03.2023 12:00
FFP 1802.03.2023 01:0010.03.2023 12:00
FFP 1902.03.2023 01:0010.03.2023 12:00
FFP 2002.03.2023 01:0010.03.2023 12:00
FFP 2102.03.2023 01:0010.03.2023 12:00
FFP 2202.03.2023 01:0010.03.2023 12:00
FFP 2302.03.2023 01:0010.03.2023 12:00
FFP 2402.03.2023 01:0010.03.2023 12:00
FFP 2502.03.2023 01:0010.03.2023 12:00
FFP 2602.03.2023 01:0010.03.2023 12:00
FFP 2702.03.2023 01:0010.03.2023 12:00
FFP 2802.03.2023 01:0010.03.2023 12:00
FFP 2902.03.2023 01:0010.03.2023 12:00
FFP 3002.03.2023 01:0010.03.2023 12:00
FFP 3102.03.2023 01:0010.03.2023 12:00
FFP 3202.03.2023 01:0010.03.2023 12:00
FFP 3302.03.2023 01:0010.03.2023 12:00
FFP 3402.03.2023 01:0010.03.2023 12:00
FFP 3502.03.2023 01:0010.03.2023 12:00
FFP 3602.03.2023 01:0010.03.2023 12:00
FFP 3702.03.2023 01:0010.03.2023 12:00
FFP 3802.03.2023 01:0010.03.2023 12:00
FFP 3902.03.2023 01:0010.03.2023 12:00
FFP 4002.03.2023 01:0010.03.2023 12:00
Tutorial Group 1 (Fri, 11-12am)27.03.2023 16:0005.04.2023 22:59
Tutorial Group 2 (Fri, 11-12am)27.03.2023 16:0005.04.2023 22: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