This course is designed to teach non-engineers (e.g., self-taught/bootcamp coders) Haskell from zero to productive in an interactive, easy-to-follow way.
Jupyter Notebook
364
232 commits
updated Sep 12, 2025
The easiest way to learn Haskell - R.M.
This course is designed to teach non-engineers (e.g., self-taught/bootcamp coders) Haskell from zero to productive in an interactive, easy-to-follow way. The course doesn't contain content specific to Plinth, but it will cover all the Haskell you'll needed to start using it.
For a more detailed explanation, keep reading or watch the introduction video:
To go through the interactive lessons, go to your chosen lesson's outline inside "What we'll cover" and click on the button that looks like this: . At the top, you will see a console that displays the progress of preparing your interactive lesson. During this time, you can scroll down and look at the lesson, that is displayed non-interactively.
NOTE: If the page loads with a "500: Internal Server Error" just refresh it, and it should be fine.
And to see the video lessons, click on the button that looks like this:
Homework/HomeworkXX folder with the homework you want to complete.Homework.hs or Main.hs file.solutions branch!Haskell-Course
| |
| |---- Homework
| |
| |---- Homework01 (Homework for lesson 01)
| |---- Homework02 (Homework for lesson 02)
| ...
|
|-------- lessons (Lessons in Jupyter notebook format. Access through Binder.)
|
|---- 1-Introduction-to-haskell
|---- 2-Functions-Data-Types-and-Signatures
Everything else can be safely ignored
If there are no buttons on a lesson, it means that it's not published yet.
In this section, we get familiar with basic concepts and Haskell syntax.
let expressionswherelet or where?filter functionany function$ operator. operatorsum and productand, length, reverse, drop, take, map, filterfoldr patternfoldl functionfoldl' functionfoldr, foldl, and foldl'Eq, OrdNum, Integral, FloatingRead, Showdatatype synonymsdata typesTweet me a riverSequence of NodesTree of NodesnewType keywordEq type class
Eq type class with mutual recursion (and Minimal Complete Definitions)WeAccept Type ClassContainer Type ClassOrd type class (Subclassing)() typegetChar, getLine, and putStrLn>> and >>= operators)do block
let, nesting do-blocks, escaping IO and returnmain actionIn this section, we learn about Haskell tooling and the necessary concepts to start working on our own projects.
Prelude and Standard LibrariesNumericUnderscoresTypeApplicationsExceptions to the ruleExceptions with a dumb self-driving 🤖 car 🚗
Exception cause I have class 😎throw all the Exceptions you want. I'll catch them all!Maybe give me a value? 🙏
Either give me a value or a reason why you didn't!Exceptions to optional valuesundefinedIn this section, we learn about a few of the most useful and talked about Abstractions in Haskell and how we deal with effects in general (not only IO).
Semigroup and Monoid?Semigroup type classMonoid type classSemigroup and Monoid?map functionFunctor type classFunctor instancesFunctor instances
Either a functor 🤔(,) a functor 🤨(->) r functor 🤯<$> operator and lifting 🏋️ a functionFunctor nesting dolls 🪆Functor as defined in baseApplicative functors?
Functor level 🥇pure 😇Applicative type classApplicative lawsApplicative as defined in baseMonads?MaybeEither eLogMonad Type ClassMonadchyMonadic lawsMonad as defined in basedo what you have to doWriter (based on Log)
LogReader
Reader MonadState of things
State MonadIn this project, we'll build a CLI that converts Markdown files into HTML files. We're going to learn about:
text libraryoptparse-applicativemegaparsec and combinatorsIdeally, you'll see the video without taking notes, and then try to implement the whole thing referencing only the libraries' documentation. Have fun!! 😃
Thank you for going on this journey with me! Please feel free to give us feedback through issues, email, or Twitter. And share this course if you find it valuable. 😄🙌
It depends on your preferences. You could:
base library and understand all types and type classes.Jupyter Notebook
97.1%
Haskell
2.9%
This course is designed to teach non-engineers (e.g., self-taught/bootcamp coders) Haskell from zero to productive in an interactive, easy-to-follow way.
Jupyter Notebook
364
232 commits
updated Sep 12, 2025
The easiest way to learn Haskell - R.M.
This course is designed to teach non-engineers (e.g., self-taught/bootcamp coders) Haskell from zero to productive in an interactive, easy-to-follow way. The course doesn't contain content specific to Plinth, but it will cover all the Haskell you'll needed to start using it.
For a more detailed explanation, keep reading or watch the introduction video:
To go through the interactive lessons, go to your chosen lesson's outline inside "What we'll cover" and click on the button that looks like this: . At the top, you will see a console that displays the progress of preparing your interactive lesson. During this time, you can scroll down and look at the lesson, that is displayed non-interactively.
NOTE: If the page loads with a "500: Internal Server Error" just refresh it, and it should be fine.
And to see the video lessons, click on the button that looks like this:
Homework/HomeworkXX folder with the homework you want to complete.Homework.hs or Main.hs file.solutions branch!Haskell-Course
| |
| |---- Homework
| |
| |---- Homework01 (Homework for lesson 01)
| |---- Homework02 (Homework for lesson 02)
| ...
|
|-------- lessons (Lessons in Jupyter notebook format. Access through Binder.)
|
|---- 1-Introduction-to-haskell
|---- 2-Functions-Data-Types-and-Signatures
Everything else can be safely ignored
If there are no buttons on a lesson, it means that it's not published yet.
In this section, we get familiar with basic concepts and Haskell syntax.
let expressionswherelet or where?filter functionany function$ operator. operatorsum and productand, length, reverse, drop, take, map, filterfoldr patternfoldl functionfoldl' functionfoldr, foldl, and foldl'Eq, OrdNum, Integral, FloatingRead, Showdatatype synonymsdata typesTweet me a riverSequence of NodesTree of NodesnewType keywordEq type class
Eq type class with mutual recursion (and Minimal Complete Definitions)WeAccept Type ClassContainer Type ClassOrd type class (Subclassing)() typegetChar, getLine, and putStrLn>> and >>= operators)do block
let, nesting do-blocks, escaping IO and returnmain actionIn this section, we learn about Haskell tooling and the necessary concepts to start working on our own projects.
Prelude and Standard LibrariesNumericUnderscoresTypeApplicationsExceptions to the ruleExceptions with a dumb self-driving 🤖 car 🚗
Exception cause I have class 😎throw all the Exceptions you want. I'll catch them all!Maybe give me a value? 🙏
Either give me a value or a reason why you didn't!Exceptions to optional valuesundefinedIn this section, we learn about a few of the most useful and talked about Abstractions in Haskell and how we deal with effects in general (not only IO).
Semigroup and Monoid?Semigroup type classMonoid type classSemigroup and Monoid?map functionFunctor type classFunctor instancesFunctor instances
Either a functor 🤔(,) a functor 🤨(->) r functor 🤯<$> operator and lifting 🏋️ a functionFunctor nesting dolls 🪆Functor as defined in baseApplicative functors?
Functor level 🥇pure 😇Applicative type classApplicative lawsApplicative as defined in baseMonads?MaybeEither eLogMonad Type ClassMonadchyMonadic lawsMonad as defined in basedo what you have to doWriter (based on Log)
LogReader
Reader MonadState of things
State MonadIn this project, we'll build a CLI that converts Markdown files into HTML files. We're going to learn about:
text libraryoptparse-applicativemegaparsec and combinatorsIdeally, you'll see the video without taking notes, and then try to implement the whole thing referencing only the libraries' documentation. Have fun!! 😃
Thank you for going on this journey with me! Please feel free to give us feedback through issues, email, or Twitter. And share this course if you find it valuable. 😄🙌
It depends on your preferences. You could:
base library and understand all types and type classes.Jupyter Notebook
97.1%
Haskell
2.9%