- It's Easy As 1,2,3 - Graham Hutton - Explains: Denotational, Small Step and Big Step semantics and also rule induction and discovering abstract machines.
- Programming Languages - Coursera
- Types and Programming Languages - Benjamin C. Pierce
- Structure and Interpretation of Computer Programs or video series
- Winter School on Denotational Semantics
- Thinking with Types - Type-Level Programming in Haskell
- Inventing Monads - Kabir Shah
- The Pervert's Guide to Computer Programming Languages
- A reckless introduction to Hindley-Milner type inference
- An Introduction to Elm
- Build an application
- Optimize Elm with Keyed and Lazy
- Unit testing
- C9 Lectures: Dr. Erik Meijer - Functional Programming Fundamentals
- First 6 chapters of learn you a haskell
- 99 Problems This is great for practicing working with lists and immutability for the first time.
- Why Functional Programming Matters
- DelftX: FP101x Introduction to Functional Programming Erik Meijer's course on functional programming.
- Programming in Haskell - Graham Hutton
- Monads
- Haskell monads and the nest of lies - explains the IO Monad.
- Arrays and Vectors
- Testing
- HUnit: Unit testing in haskell
- QuickCheck: A very cool testing library, based on property based testing. What you do is write a predicate that should always be true
(eg length (reverse list) == length list)
. You then pass the predicate the quickCheck, and it will generate a lot of random values (in this case lists) and test that the predicate is true for all results. John Hughes - Testing the Hard Stuff and Staying Sane
- Parsing
- Theorems for free!
- Monad Transformers
- Zippers - Learn You a Haskell
- Continuation passing style
- the Continuation monad
- Subscribe to Haskell weekly news
- Listen to The Haskell Cast
- Do a moderate sized project
- What the heck is Typeable
- Fixpoints in Haskell
- GADTs
- Stanford CS240h: Phantoms
- Write foldl using foldr
- Recursion Schemes: catamorphisms, etc.
- Tagless Final Encoding in Haskell
- Inspection Testing
- hs-speedscope
- Fold and Unfold for Program Semantics - Graham Hutton
- A Guide to GHC's Extensions
- Write you a Haskell - Hindley-Milner Inference
- Extensible ADT
- data vs codata
- A Tour of Go in Haskell
- Linear Haskell: Practical linearity in a higher-order polymorphic language
- Lenses
- Multiparameter type classes/functional dependencie
- Haskell's kind system - a primer
- Type families
- Existentially quantified types
- Arrows: Arrows are a way of representing computations that take an input and return an output. A function is the most basic type of arrow, but there are many other types. The library also has many very useful functions for manipulating arrows - they are very useful even if only used with plain old haskell functions.
- Typoclasspedia Also, there are many concepts (like the Monad concept that you should eventually learn. This will be easier than learning Monads the first time, as your brain will be used to dealing with the level of abstraction involved. A very good overview for learning about these high level concepts and how they fit together is the Typeclassopedia.
- Fast Functional Goats, Lions and Wolves
- History of Haskell
- What I wish I knew when learning Haskell
- The Little Schemer
- Basics of Scheme, Recursion, Higher order functions, Y-combinator and writing an interpreter.
- Quote, Unquote - How to Design Programs
- Real World OCaml - Part 1
- Functors
- First class Modules
- Open recursion
- Mixins
- Real World OCaml - Part 2
- Real World OCaml - Part 3
- Programming Rust: Fast, Safe Systems Development
- Tokio - Documentation
- impl
- Advanced Lifetimes - The Rust Programming Language
- Proving theorems and certifying programs with Coq by Stephan Boyer
- Coq in a Hurry and exercises
- 3110 Coq Tactics Cheatsheet
- A Tutorial on Coinduction and Bisimulation - slides - Joonwon Choi
- Certified Programming with Dependent Types - Adam Chlipala
- Software Foundations
- Video Lectures by Conor McBride
- Programming Language Foundations in Agda - Philip Wadler and Wen Kokke Starts from the basics and contains a chapter on Bisimulation
- The Most Beautiful Program Ever Written - William Byrd
- The Reasoned Schemer
- microKanren: A Minimal Functional Core for Relational Programming
- Implement it in your favourite programming language
- One VM to Rule Them All, One VM to Bind Them
- Graal: How to use the new JVM JIT compiler in real life by Chris Thalinger
- Project Sulong: an LLVM bitcode interpreter on the Graal VM with Matthias Grimmer