Linköping, 23–27 May (Part I) and June (Part II), 2016



Papers, tutorials, and lecture notes as indicated for each session. There are also a number of books on Haskell and functional programming that you may find useful. Some examples:

Learn You a Haskell for Great Good [Lip11] by Miran Lipovača is a light-hearted yet thorough introduction to Haskell for those who know how to program in (imperative) languages. It is also free to read on-line.

Programming in Haskell [Hut07] by Graham Hutton is a good beginner's book on Haskell, although aimed at first-year undergraduates.

Purely Functional Data Structures [Oka98] by Chris Okasaki is a great book on data structures in a purely functional setting, and how to employ both lazy and strict evaluation to get the right complexity bounds. Moreover, as purely functional data structures are persistent, which is a very useful property in its own right, the utility of the presented material goes well beyond functional programming.

Real World Haskell [SGS09] by Bryan O'Sullivan, John Goerzen, and Don Stewart covers everything you need to know for serious Haskell development.

Wondering how to debug your Haskell programs? Well, there are a number of options. One possibility, while it has certain drawbacks, is the traditional, procedural debugger integrated in GHCi 6.8.1 or later. You can read more about it in Bernie Pope's article in issue 10 of the Monad.Reader [POP08].

Lectures and Practicals

This is a somewhat tentative overview of the Lectures (L) and Practicals (P). Some lectures may be a bit shorter. Some a bit longer. The topics might be adjusted towards the end of the week. Academic quarter is assumed throughout.

Session Date and Time Content Reading
L1 Mo 23 May, 9–11 Review of Haskell: A lightening tour in 90 minutes Slides: on screen, 4up, 9up
[HPF] [Hug89] [Lip11] [Wad89]
L2 Mo 23 May, 11–12 The Untyped λ-calculus: Introduction Slides: on screen, 4up, 9up
L3 Mo 23 May, 13–14 The Untyped λ-calculus: Recursion and Fixed Points Slides: on screen, 4up, 9up
P1 Mo 23 May, 14–15 The Untyped λ-claculus
L4 Mo 23 May, 15–16 The Untyped λ-calculus: Operational Semantics and Reduction Orders Slides: on screen, 4up, 9up
Video Mo 23 May, 16–17 John Hughes: Why Functional Programming Matters YouTube
L5 Tu 24 May, 9–11 Lazy Functional Programming Slides: on screen, 4up, 9up
[AHU83] [Hug89] [Joh87] [JG92] [Llo94]
P2 Tu 24 May, 11–12 Lazy Functional Programming Exercises Lecture 5 Spreadsheet evaluator Model solutions
L6 Tu 24 May, 13–15 Purely Functional Data Structures Slides: on screen, 4up, 9up
P3 Tu 24 May, 15–17 Lazy Functional Programming and Purely Functional Data Structures Exercises Lecture 6 Code for Problem 1 Code for Problem 2
L7 We 26 May, 9–11 Monads Slides: on screen, 4up, 9up
[BHM00] [Wad92]
P4 We 26 May, 11–12 Catch up
P5 We 26 May, 13–14 Catch up
L8 We 26 May, 14–16 Type Classes Slides: on screen, 4up, 9up
P6 We 26 May, 16–17 Type Classes Exercises Lecture 8
L9 Th 27 May, 9–10 Monads in Haskell Slides: on screen, 4up, 9up
L10 Th 27 May, 10–11 Monad Transformers Slides: on screen, 4up, 9up
P7 Th 27 May, 11–12 Monads and Monad Transformers Exercises Lectures 7, 9, and 10
L11 Th 27 May, 13–15 Concurrency Slides: on screen, 4up, 9up
[Cla99] [HMPH05] [Pey07]
P8 Th 27 May, 15–16 Monads and Monad Transformers
L12 Th 27 May, 16–17 GADTs and Type-level Programming (Live Coding) Code: GADT-based evaluator
[PVS06] [KPS10]
L13 Fr 28 May, 9–10 Arrows Slides: on screen, 4up, 9up
L14 Th 27 May, 10–11 Games and Music with Yampa Slides: on screen, 4up, 9up
P9 Fr 27 May, 11–12 Catch up/Discussion
L15 Fr 27 May, 13–14 System F: The Polymorphic λ-calculus (self study) Slides: on screen, 4up, 9up


3 hp corresponding to 2 weeks of full-time work.


The agreed project proposal needs to make it clear:



Last updated 27 May 2016.