Lectures
As we proceed through the lectures, I will try to write down lecture notes so that you have most of the course material in a single place. However, I am unsure if I will manage to be on time with them due to other obligations.
Racket
# | Title | Content | Files |
---|---|---|---|
1. | Introduction | Discusses the key ideas behind functional programming. It further introduces the programming language Racket. | Slides. Log. |
2. | Lists & Trees | Focuses on Racket lists and trees. Further, it introduces the unit testing library Rackunit. | Slides. Log. |
3. | Higher Order Functions | Deals with higher-order functions like map , filter , foldl , function closures and Racket structures. | Slides. Log. |
4. | Lazy Evaluation | Introduces pattern matching, and explains how to implement lazy evaluation and streams in Racket. | Slides. Log. |
5. | Macros & Interpreters | Briefly introduces syntactic macros, and shows how to implement interpreters (the latter is remains to be written). | Slides. Log. Brainf*ck.rkt. |
6. | Lambda Calculus | Describes the basics of lambda calculus to show you were most of the initial ideas for functional programming came from. | Slides. Lambda-calculus.rkt. |
Bonus | Immutable datastructures | For the interested reader there is another lecture on immutable datastructures like random access lists. |
Haskell
# | Title | Content | Files |
---|---|---|---|
7. | Introduction to Haskell | Introduces Haskell as a compiled, statically-typed, and lazy language. | Slides. Log. |
8. | Haskell Types | Discusses the strongly-typed, static, and inferred type system of Haskell including: parametric polymorphism, ad-hoc polymorphism (typeclasses), and algebraic datatypes. | Slides. Log. |
9. | Type Classes | We discuss some more examples of type classes, most importantly Functor s. | Slides. Log. |
10. | Haskell's IO & Monads | Introduces Haskell's IO and the typeclass Monad . | Slides. Log. |
11. | Monadic Parsing | Uses Functor and Monad instances from the previous lecture to demonstrate the elegance of monadic parsing. | Slides. Log. Parser.hs . |
12. | State Monad | Make repetitive, stateful boilerplate disappear via the State monad. | Slides. Log. State.hs . StateIO.hs . |
13. | Lecture 13 | Dissecting foldr into Monoid s and Foldable s. | Slides. Log. Dataset. |
Bonus | Parallel Haskell | Introduces Haskell's spark system and demonstrates how to use Strategy types for simple parallelization of existing Haskell programs. | pfold.hs . parmaze.hs . |
Old recorded lectures
Old recorded lectures from 2021 can be found here.