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.
Lecture 01: Introduction
Discusses the key ideas behind functional programming. It further introduces the programming language Racket.
Lecture 02: Lists & Trees
Focuses on Racket lists and trees. Further, it introduces the unit testing library Rackunit.
Lecture 3: Higher Order Functions
Deals with higher-order functions like (map
, filter
, foldl
), function closures and Racket structures.
Lecture 4: Lazy Evaluation
Introduces pattern matching, and explains how to implement lazy evaluation and streams in Racket.
Lecture 5: Macros & Interpreters
Briefly introduces syntactic macros, and shows how to implement interpreters (the latter is remains to be written).
Lecture 6: Lambda Calculus
Describes the basics of lambda calculus to show you were most of the initial ideas for functional programming came from.
Bonus Lecture: Immutable datastructures
For the interested read there is another lecture on immutable datastructures like random access lists.
Lecture 7: Introduction to Haskell
Lecture 8: Haskell Types
Discusses the strongly-typed, static, and inferred type system of Haskell including: parametric polymorphism, ad-hoc polymorphism (typeclasses), and algebraic datatypes.
Lecture 9: Type Classes
We discuss some more examples of type classes, most importantly Functor
s.
Lecture 10: Haskell's IO & Monads
Lecture 11: Monadic Parsing
Lecture 12: State Monad
Slides. Log. State.hs
. StateIO.hs
.
Lecture 13: Monoids & Foldables
Lecture notes coming soon!
Lecture 14: Parallel Haskell
Old recorded lectures
Old recorded lectures from 2021 can be found here.