Note: This page is in its nascent form with much more content to be added, and then organized.
Roughly there exists three autodidactic approaches to learning the individual Haskell concepts.
- Read tutorials & learn by doing
- Dig into the theory behind
- Learn GHC-level implementation details
Approach (1) is great for “getting started”, but proceeding to (2) and maybe even (3) will give a more foundational perspective, while demystifying otherwise complex ideas. Here, I aim to collect the various resources toward that end.
Dig into the theory behind
- What I wish I knew when learning Haskell
- Theory behind it all (Lambda calculus, System F, logic, etc. – see “course” below)
- For intuition into how type class/ type family/ data kinds/ etc fit together: https://lexi-lambda.github.io/blog/2021/03/25/an-introduction-to-typeclass-metaprogramming/
- Agda is, in some ways, the most advanced functional programming language in existence, and so if you learn how to program in Agda, you will have a very strong foundation for programming in other languages that use the idioms of functional programming. –Verified Functional Programming in Agda, Aaron Stump
- The book ‘Program = Proof’ seems excellent
GHC-level implementation details
- GHC User Guide
- Language manual is a good starting point. Haskell to Core: Understanding Haskell Features Through Their Desugaring
- “Thinking about the way Haskell language constructs are desugared into Core provides a deeper understanding of these features, rather than a superficial familiarity. For example, it provides a clear intuition for existential quantification, GADTs, and do-notation.”
- GHC Core is “System F with Type Equality Coercions“ and “System FC with Explicit Kind Equality“ …. and Haskell is an abstraction over GHC Core. (Ref, on relation of Haskell to typed lambda calculus)
Where do these fit in?
- Thinking in Types, by isovector
- Category Theory, and other theory
- Functional Programming and Proof Checking Course Plan: https://oxij.org/activity/itmo/fp/plan/
Resources for these?
- Types = Values; https://vitez.me/hts-language
Create a course
- Find relevant papers, in order.
- Write You A Haskell: Building a modern functional compiler from first principles.
There are two good lists of foundational papers for implementing a Haskell compiler: