Preface

This lecture teaches concepts of higher programming languages through the pure functional programming language Haskell. The reasons for choosing Haskell to convey higher concepts are as follows:

  • It is a very different programming language and paradigm than what the students know so far, forcing them to re-think what they know about object-oriented programming.
  • Its enforcement of the pure functional programming paradigm forces the students to embrace it fully without any option of working around it (such as in Scala or Rust or similar modern Hybrids).
  • It contains many highly abstract concepts (e.g. Generics, Immutability, Lambdas, Pattern Matching, Infinite Streams, Type Classes, Monads, FRP) which have found their way into mainstream OO programming. If students master these concepts in Haskell, they will be able to easily transfer the knowledge to their existing expertise on OO.
  • It forces students to think more rigorously and abstract about their programs (composition, types, side effects,…) which will have an impact also on their OO skills.

Ultimately, by learning higher concepts in Haskell will make the students better programmers and software engineers in general and in OO in particular.

For a more detailed discussion see Teaching Haskell means teaching important concepts

Timeline

The content according to the timeline might be adopted as needed to the pace of the class.

  1. Lecture Thursday 17 Sep, 11:30 - 13:05
    • Chapter 1: Introduction
    • Chapter 2: A Taste of Functional Programming and Haskell
    • Chapter 3: First Steps in Haskell
  2. Lecture Tuesday 22 Sep, 11:30 - 13:05
    • Chapter 4: Types and Classes
    • Chapter 5: Defining Functions
  3. Lecture Thursday 24 Sep, 11:30 - 13:05
    • Chapter 6: Recursive Functions
    • Exercise Session 1
  4. Lecture Tuesday 29 Sep, 11:30 - 13:05
    • Exercise Session 1
  5. Lecture Thursday 1 Oct, 11:30 - 13:05
    • Chapter 7: Higher-Order Functions
  6. Lecture Thursday 8 Oct, 11:30 - 13:05
    • Chapter 8: Declaring Types
  7. Lecture Thursday 15 Oct, 11:30 - 13:05
    • Chapter 9: Lazy Evaluation
  8. Lecture Thursday 22 Oct, 11:30 - 13:05
    • Exercise Session 2
  9. Lecture Tuesday 27 Oct, 11:30 - 13:05
    • Chapter 10: Type Classes
  10. Lecture Thursday 29 Oct, 11:30 - 13:05
    • Chapter 10: Type Classes
  11. Lecture Tuesday 3 Nov, 11:30 - 13:05
    • Exercise Session 3
  12. Lecture Thursday 5 Nov, 11:30 - 13:05
    • Chapter 11: Random Numbers
    • Chapter 12: Monads Motivated
  13. Lecture Tuesday 10 Nov, 11:30 - 13:05
    • Chapter 12: Monads Motivated
    • Chapter 13: Monads Defined
  14. Lecture Tuesday 17 Nov, 11:30 - 13:05
    • Chapter 13: Monads Defined
    • Exercise Session 4
  15. Lecture Tuesday 24 Nov, 11:30 - 13:05
    • Chapter 14: Monads In Use (Do Notation & IO)
  16. Lecture Tuesday 1 Dec, 11:30 - 13:05
    • Chapter 14: Monads In Use (Concurrency)
  17. Lecture Tuesday 15 Dec, 11:30 - 13:05
    • Chapter 14: Monads In Use (Property-Based Testing)
    • Chapter 15: Real-World Haskell
  18. Lecture Tuesday 22 Dec, 11:30 - 13:05
    • Exercise Session 5
  19. Lecture Tuesday 12 Jan, 11:30 - 13:05
    • Chapter 16: Dependent Types
  20. Lecture Tuesday 19 Jan, 11:30 - 13:05
    • Invited Talk: Haskell in the Industry
  21. Lecture Tuesday 26 Jan, 11:30 - 13:05
    • Wrap up, exam preparation, exercises

Written exam Tuesday 2 Feb 10:40 - 13:05 (3 hours!)


Assessment

Written exam.