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.

2020S, 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

Learning outcomes

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

  • describe and explain advanced principles and concepts of functional programming and to demonstrate their application in practice.
  • explicate the theoretical and practical foundations of functional programming, and to apply them for the verification and validation of properties (correctness, termination,...) of functional programs.
  • identify, demonstrate, and asses benefits and limitations of a (pure) functional programming style.
  • solve programming tasks from small to medium size and complexity by appropriately and professionally applying basic and advanced concepts and principles of functional programming.

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 2019/2020.
    • 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

  • 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.
  • Role model and feedback-oriented learning: Presenting, explaining, comparing, contrasting, and rating own and others solutions of assignments in tutor-guided tutorials.
  • Self-assessment tests: Tests supporting the regular self-assessment and self-reflection of one's own previous progress and success of learning.

Mode of examination

Immanent

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 (21.0h)
    • Lecture: 7.0h (7 units * 1.0h)
    • Flipped classroom: 3.5h (7 units * 0.5h)
    • Tutorials: 10.5h (7 units * 1.5h)
  • Independent learning activities (53.5h)
    • Self-dependent acquirement of learning outcomes: 28.0h (Proposal: 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 (Proposal: 7 Assignments * 3.5h)
    • Oral exam preparation: 1.0h
  • Oral exam: 0.5h

The preliminary course meeting and the first lecture take place on
Thursday, 5 March 2020, from 4.15 pm to 5.45 pm.

Lecturers

Institute

Course dates

DayTimeDateLocationDescription
Thu16:00 - 18:0005.03.2020 - 12.03.2020Seminarraum Argentinierstrasse LVA 185.A05 Advanced Functional Programming
Advanced Functional Programming - Single appointments
DayDateTimeLocationDescription
Thu05.03.202016:00 - 18:00Seminarraum Argentinierstrasse LVA 185.A05 Advanced Functional Programming
Thu12.03.202016:00 - 18:00Seminarraum Argentinierstrasse LVA 185.A05 Advanced Functional Programming
Course is held blocked

Examination modalities

  • Seven rated submissions of programming assignments.

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

Course registration

Begin End Deregistration end
31.01.2020 01:00 12.03.2020 12:00 31.03.2020 12:00

Group Registration

GroupRegistration FromTo
FFP 105.03.2020 01:0013.03.2020 12:00
FFP 205.03.2020 01:0013.03.2020 12:00
FFP 305.03.2020 01:0013.03.2020 12:00
FFP 405.03.2020 01:0013.03.2020 12:00
FFP 505.03.2020 01:0013.03.2020 12:00
FFP 605.03.2020 01:0013.03.2020 12:00
FFP 705.03.2020 01:0013.03.2020 12:00
FFP 805.03.2020 01:0013.03.2020 12:00
FFP 905.03.2020 01:0013.03.2020 12:00
FFP 1005.03.2020 01:0013.03.2020 12:00
FFP 1105.03.2020 01:0013.03.2020 12:00
FFP 1205.03.2020 01:0013.03.2020 12:00
FFP 1305.03.2020 01:0013.03.2020 12:00
FFP 1405.03.2020 01:0013.03.2020 12:00
FFP 1505.03.2020 01:0013.03.2020 12:00
FFP 1605.03.2020 01:0013.03.2020 12:00
FFP 1705.03.2020 01:0013.03.2020 12:00
FFP 1805.03.2020 01:0013.03.2020 12:00
FFP 1905.03.2020 01:0013.03.2020 12:00
FFP 2005.03.2020 01:0013.03.2020 12:00
FFP 2105.03.2020 01:0013.03.2020 12:00
FFP 2205.03.2020 01:0013.03.2020 12:00
FFP 2305.03.2020 01:0013.03.2020 12:00
FFP 2405.03.2020 01:0013.03.2020 12:00
FFP 2505.03.2020 01:0013.03.2020 12:00
FFP 2605.03.2020 01:0013.03.2020 12:00
FFP 2705.03.2020 01:0013.03.2020 12:00
FFP 2805.03.2020 01:0013.03.2020 12:00
FFP 2905.03.2020 01:0013.03.2020 12:00
FFP 3005.03.2020 01:0013.03.2020 12:00
FFP 3105.03.2020 01:0013.03.2020 12:00
FFP 3205.03.2020 01:0013.03.2020 12:00
FFP 3305.03.2020 01:0013.03.2020 12:00
FFP 3405.03.2020 01:0013.03.2020 12:00
FFP 3505.03.2020 01:0013.03.2020 12:00
FFP 3605.03.2020 01:0013.03.2020 12:00
FFP 3705.03.2020 01:0013.03.2020 12:00
FFP 3805.03.2020 01:0013.03.2020 12:00
FFP 3905.03.2020 01:0013.03.2020 12:00
FFP 4005.03.2020 01:0013.03.2020 12:00

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