Hero roadmap: the whole course on one page

Contents
All 50 lessons
How to practice
The capstone, revisited
Where to go next

All 50 lessons

Fifty Haskell lessons, five stages. Start at lesson one and move forward in order: every page ends with a link to the next one. The whole map is below, so you can also jump straight to the topic that brought you here.

Start: 01-10

Language core: 11-20

Types and abstractions: 21-30

Effects and tooling: 31-40

Real programs: 41-50

How to practice

Read one lesson, type every snippet by hand, then break it on purpose and read the compiler error. The error messages are the fastest teacher in the language, and they get better the more you provoke them.

Keep the loop tight: write the signature, write the body, compile, fix the first error only. When a definition refuses to typecheck for more than twenty minutes, replace the body with undefined and check the signature in GHCi with :t.

The capstone, revisited

The todo CLI from lesson 49 is a skeleton for a larger project. Each of these extensions uses a different part of the course, and none of them requires a new idea:

Where to go next

Four directions continue naturally from here. Pick the one that matches the program you want to write, not the one that looks most advanced:

-- web services servant, warp, wai, aeson -- data and streaming conduit, streaming, vector, cassava -- effects and architecture mtl, transformers, effectful, polysemy -- correctness property tests, liquidhaskell, formal methods

Two books carry the next stage well: Real World Haskell for breadth and Haskell in Depth for production concerns. The Development section has neighbouring courses if you want a second language to compare against.

Rebuild the capstone from memory without reopening lesson 49. Then extend it with one item from the list above and keep the tests green at every step. The course ends; the practice does not.

Next: Haskell course

Article author: Arthur Isaev

Related articles
Haskell
Haskell course: zero to hero in 50 lessons
What is Haskell and why it matters
Install the toolchain with GHCup
GHCi: the interactive shell
Your first program
Values with let and where
Types and type signatures
Functions and application
Currying and partial application
Operators, sections, and fixity
if, guards, and pattern guards
case expressions
Pattern matching
Tuples
Lists
Ranges and enumeration
List comprehensions
Recursion replaces loops
map, filter, and foldr
Lambdas and composition
Type classes
Parametric polymorphism
Maybe and null safety
Either and recoverable errors
data: product types
data: sum types
Records
newtype and type synonyms
Recursive data: binary trees
Functor
Applicative
Monad
do notation
IO and purity
Files and IO
Modules and imports
Cabal projects
Dependencies
Testing with HUnit
Property testing with QuickCheck
Laziness and infinite lists
Strictness and space leaks
Folds
Monoids
Traversable
Monad transformers
Errors and exceptions
Concurrency
Parsing with Megaparsec
Capstone: a todo CLI
Hero roadmap: the whole course on one page

Search this site

Channel @aofeed Chat @aofeedchat

Contacts and cooperation:
I recommend our hosting beget.com
Write to info@aredel.com if you:
1. Want to write an article for our site or translate an article into your native language.
2. Want to place thematically relevant ads on the site.
3. Ads on my site pass maximum censorship. If you see an ad block unsuitable for school-age children, shocking or misleading - please contact us by e-mail
4. Found a mistake, inaccuracy, bug, etc. on the site. ... .......
5. Articles can be shared on social media by clicking a network icon: