Please be advised: Due to maintenance at the BRZ-SAP system, some errors may occur. The maintenance is scheduled until 27.06.2022. Please accept our apologies for any inconvenience.

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.

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

Course evaluation

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 21.
    • 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 (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

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 (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 (due to limited room availabity tentatively exclusively online, video presence): 0.5h
  • Oral exam (in-person, if possible; otherwise online, face-to-face video presence): 0.5h

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

Lecturers

Institute

Course dates

DayTimeDateLocationDescription
Thu16:00 - 18:0003.03.2022 - 09.06.2022EI 4 Reithoffer HS 185.A05 Advanced Functional Programming
Fri11:00 - 12:0008.04.2022 - 10.06.2022Seminarraum FAV 01 B (Seminarraum 187/2) LVA 185.A03 Advanced Functional Programming (Tutorial)
Advanced Functional Programming - Single appointments
DayDateTimeLocationDescription
Thu03.03.202216:00 - 18:00EI 4 Reithoffer HS 185.A05 Advanced Functional Programming
Thu10.03.202216:00 - 18:00EI 4 Reithoffer HS 185.A05 Advanced Functional Programming
Thu17.03.202216:00 - 18:00EI 4 Reithoffer HS 185.A05 Advanced Functional Programming
Thu24.03.202216:00 - 18:00EI 4 Reithoffer HS 185.A05 Advanced Functional Programming
Thu31.03.202216:00 - 18:00EI 4 Reithoffer HS 185.A05 Advanced Functional Programming
Thu07.04.202216:00 - 18:00EI 4 Reithoffer HS 185.A05 Advanced Functional Programming
Fri08.04.202211:00 - 12:00Seminarraum FAV 01 B (Seminarraum 187/2) LVA 185.A03 Advanced Functional Programming (Tutorial)
Thu28.04.202216:00 - 18:00EI 4 Reithoffer HS 185.A05 Advanced Functional Programming
Fri29.04.202211:00 - 12:00Seminarraum FAV 01 B (Seminarraum 187/2) LVA 185.A03 Advanced Functional Programming (Tutorial)
Thu05.05.202216:00 - 18:00EI 4 Reithoffer HS 185.A05 Advanced Functional Programming
Fri06.05.202211:00 - 12:00Seminarraum FAV 01 B (Seminarraum 187/2) LVA 185.A03 Advanced Functional Programming (Tutorial)
Thu12.05.202216:00 - 18:00EI 4 Reithoffer HS 185.A05 Advanced Functional Programming
Fri13.05.202211:00 - 12:00Seminarraum FAV 01 B (Seminarraum 187/2) LVA 185.A03 Advanced Functional Programming (Tutorial)
Thu19.05.202216:00 - 18:00EI 4 Reithoffer HS 185.A05 Advanced Functional Programming
Fri20.05.202211:00 - 12:00Seminarraum FAV 01 B (Seminarraum 187/2) LVA 185.A03 Advanced Functional Programming (Tutorial)
Thu02.06.202216:00 - 18:00EI 4 Reithoffer HS 185.A05 Advanced Functional Programming
Fri03.06.202211:00 - 12:00Seminarraum FAV 01 B (Seminarraum 187/2) LVA 185.A03 Advanced Functional Programming (Tutorial)
Thu09.06.202216:00 - 18:00EI 4 Reithoffer HS 185.A05 Advanced Functional Programming
Fri10.06.202211:00 - 12:00Seminarraum FAV 01 B (Seminarraum 187/2) LVA 185.A03 Advanced Functional Programming (Tutorial)
Course is held blocked

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
01.02.2022 01:00 11.03.2022 12:00 25.03.2022 12:00

Group Registration

GroupRegistration FromTo
FFP 103.03.2022 01:0011.03.2022 12:00
FFP 203.03.2022 01:0011.03.2022 12:00
FFP 303.03.2022 01:0011.03.2022 12:00
FFP 403.03.2022 01:0011.03.2022 12:00
FFP 503.03.2022 01:0011.03.2022 12:00
FFP 603.03.2022 01:0011.03.2022 12:00
FFP 703.03.2022 01:0011.03.2022 12:00
FFP 803.03.2022 01:0011.03.2022 12:00
FFP 903.03.2022 01:0011.03.2022 12:00
FFP 1003.03.2022 01:0011.03.2022 12:00
FFP 1103.03.2022 01:0011.03.2022 12:00
FFP 1203.03.2022 01:0011.03.2022 12:00
FFP 1303.03.2022 01:0011.03.2022 12:00
FFP 1403.03.2022 01:0011.03.2022 12:00
FFP 1503.03.2022 01:0011.03.2022 12:00
FFP 1603.03.2022 01:0011.03.2022 12:00
FFP 1703.03.2022 01:0011.03.2022 12:00
FFP 1803.03.2022 01:0011.03.2022 12:00
FFP 1903.03.2022 01:0011.03.2022 12:00
FFP 2003.03.2022 01:0011.03.2022 12:00
FFP 2103.03.2022 01:0011.03.2022 12:00
FFP 2203.03.2022 01:0011.03.2022 12:00
FFP 2303.03.2022 01:0011.03.2022 12:00
FFP 2403.03.2022 01:0011.03.2022 12:00
FFP 2503.03.2022 01:0011.03.2022 12:00
FFP 2603.03.2022 01:0011.03.2022 12:00
FFP 2703.03.2022 01:0011.03.2022 12:00
FFP 2803.03.2022 01:0011.03.2022 12:00
FFP 2903.03.2022 01:0011.03.2022 12:00
FFP 3003.03.2022 01:0011.03.2022 12:00
FFP 3103.03.2022 01:0011.03.2022 12:00
FFP 3203.03.2022 01:0011.03.2022 12:00
FFP 3303.03.2022 01:0011.03.2022 12:00
FFP 3403.03.2022 01:0011.03.2022 12:00
FFP 3503.03.2022 01:0011.03.2022 12:00
FFP 3603.03.2022 01:0011.03.2022 12:00
FFP 3703.03.2022 01:0011.03.2022 12:00
FFP 3803.03.2022 01:0011.03.2022 12:00
FFP 3903.03.2022 01:0011.03.2022 12:00
FFP 4003.03.2022 01:0011.03.2022 12:00
Tutorial Group 1 (Fri, 11-12am)28.03.2022 16:0006.04.2022 22:59
Tutorial Group 2 (Fri, 11-12am)28.03.2022 16:0006.04.2022 22:59

Curricula

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