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].
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
[Oka98] |
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
[BHM00] |
L10 | Th 27 May, 10–11 | Monad Transformers | Slides: on screen,
4up,
9up
[LHJ95] |
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
[Hug04] |
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.
Deadlines:
The agreed project proposal needs to make it clear:
Assessment: