After successful completion of the course, students are able to (among others)
- explain the basic principles and concepts of the functional programming style and its theoretical foundation, to distinguish it from other programming styles like procedural, object-oriented, logical programming, and to identify and illustrate them considering the functional programming language Haskell.
- solve programming tasks in-the-small by means of task-adequate Haskell programs, to develop expressive test cases to validate these programs, and to execute them using the interpreter Hugs.
- explain the meaning and evaluation process of Haskell programs in a step-by-step manner for various evaluation orders.
- reason about the chosen proceeding of programming and non-programming related issues factually and professionally.
- investigate, assess, and compare Haskell programs with respect to syntactical and semantical correctness, generality, reusability, efficiency and performance properties, and adequate usage of functional language concepts.
This course is held in German. Without sufficient command of the German language you are unlikely to benefit from attending this course.
The course introduces the principles and concepts of functional
programming, where it stretches from the foundations to the
application. Using concrete problems as examples it will be
demonstrated and discussed how to use them for solving problems in the
tutorials complementing the course. Own proposals to solve
specific problems shall be presented and put up for
discussion. Practical assignments as part of the lab tutorial offer
the opportunity to independently apply and practice the functional
programming style, and to gain a deep practical understanding of the
concepts and principles of functional programming. For demonstration
and implementation in course and tutorials the state-of-the-art
functional programming language Haskell is used.
Part I: Introduction
Part II: Basics
- Elementary types, tuples, lists, strings
- Functions
- Type synonyms, new types, type classes
- Data type declarations, algebraic types
- Patterns and more
Part II: Applicative Programming
- Recursion
- Evaluating expressions
- Program development, program understanding
Part IV: Functional Programming
- Higher-order functions
- Polymorphism
Part V: Foundations of Functional Programming
- Lambda calculus
- Evaluation orders
- Type checking, type inference
Part VI: Extensions and Advanced Concepts
- Input and output
- Error handling
- Modules
- Programming principles, programming with streams and higher-order functions
Part VII: Conclusions, Looking Ahead
- Conclusions, looking back, looking ahead
References
Appendix
- Formal models of computation
- Other functional languages
- Aspects of Implementation
Selected Reading Recommendations
- Simon Thompson. Haskell: The Craft of Functional Programming.
Addison-Wesley/Pearson, 3rd edition, 2011.
- Ernst-Erich Doberkat. Haskell: Eine Einführung für Objektorientierte.
Oldenbourg Verlag, 2012.
- Peter Pepper. Funktionale Programmierung in OPAL, ML, Haskell und Gofer.
Springer-V., 2nd edition, 2003.
- Simon Peyton Jones (Edt.). Haskell 98: Language and Libraries.
The Revised Report. Cambridge University Press, 2003.
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 VII 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 (52.5h)
- Self-dependent acquirement of learning outcomes: 28.0h (Proposal: Part I/3.0h, Part II/4.0h, Part III/4.0h, Part IV/6.0h, Part V/6.0h, Part VI/4.0h, Part VII/1.0h)
- In particular: Solving assignments: 22.0h (Proposal: 4 Assignments * 2.5h + 3 Assignments * 4.0h)
- Preparation for the written exam: 2.5h
- Written exam: 1.5h
The course starts with a preliminary course meeting and the first lecture on Tuesday, 1 October 2019, 08.15am-09.45am, in "Informatik-Hörsaal."
Assessment of the programming assignments and the written examination
on the lecture and tutorial material.
Detailed information on the assessment procedures and modalities
are given in the notes on the preliminary course meeting (cf. homepage of the course).
Die Anmeldung zur Lehrveranstaltung erfolgt über TISS. Diese ist
maßgeblich für die Teilnahme an der Lehrveranstaltung und unterliegt
den in den Studienplänen genannten Voraussetzungen.
Nach Abschluss der Anmeldeperiode wird für die Studierenden mit
valider Anmeldung ein persönliches Benutzerkonto auf der Maschine
g0.complang.tuwien.ac.at eingerichtet. Benutzerkennung und erstes
Losungswort werden jedem Teilnehmer durch Nachricht an die
Standardadresse <e-Matr.Nr>@student.tuwien.ac.at mitgeteilt. Dieses
erste Losungswort ist im Zuge des ersten Einbuchens auf das
Benutzerkonto durch ein selbstgewähltes neues Zugangswort zu ersetzen.