Making Sense of Monads

Master Haskell's Biggest Stumbling Block!

Making Sense of Monads

There are probably a thousand blog posts, articles, and videos out there trying to teach what monads are. Some are too simple to really tell you what's going on ("A monad is like a burrito!"). Some are too complicated for anyone who isn't already well versed in abstract math ("A monad is a monoid is the category of endofunctors!").

All of them try to pass on some of the fundamental knowledge. But virtually none of them provide you with the tools you really need to use monads in your own code. For that, you need practical experience that involves writing the code yourself.

Our Making Sense of Monads course is designed to provide just that. In this course, you'll learn:

  1. Fundamental knowledge about simpler abstract structures that will help you understand monads
  2. How to understand monadic syntax in Haskell
  3. How to use all of the most common monads in Haskell

And best of all, you'll get a chance to practice your skills with programming exercises, and some project-based code.

Course Content And Outline

The course content consists of 3 elements:

  1. Video Lectures
  2. Screencast Videos
  3. Programming Exercises

In video lectures, your teacher will introduce the core concepts of the lesson, including an in-depth breakdown of the code you need to implement the feature.

Screencast videos will show these concepts in action, in an IDE, so you can follow along.

Finally, you'll then get the chance to try the concepts for yourself with our detailed programming exercises. These exercises are the most important part of the course! By writing the code and applying the concepts yourself, you'll build up the confidence to use these ideas in your own projects.

This short course consists of roughly three different parts. Here are the different areas you'll cover:

Functional Structures

This course starts with an overview of basic functional structures. Monads are a bit tricky to understand as an abstract structure. So we'll start with simpler structures like functors and monoids. We'll learn about their typeclass representations and how different structures can have "laws" associated with them.


The core material of this course is, naturally, learning how to use monads. We'll discuss "What is a Monad", as well as the easiest way to understand monadic syntax. You'll also learn about the most commonly used monads in Haskell and how to combine them together!

Parsing Projects

The course concludes with two mini-projects centered around parsing. Parsing is a fundamentally stateful (and thus monadic) activity, so it will give you some great practice for your new skills! You'll learn the ins and outs of the Megaparsec library, and get the chance to write a basic JSON parser as well as a parser for a more complicated language format.

For more details, see the full outline and FAQ below!

Your Instructor

James Bowen
James Bowen

James is a Software Engineer living in San Francisco, CA. He first discovered Haskell in college, but began using it consistently since 2015. His Haskell experience blends multiple side projects as well as professional work. In late 2016, he began the Monday Morning Haskell blog, where he publishes new Haskell content every week.

Frequently Asked Questions

When does the course start and finish?
The course starts now and never ends! It is a completely self-paced online course - you decide when you start and when you finish.
How long do I have access to the course?
How does lifetime access sound? After enrolling, you have unlimited access to this course for as long as you like - across any and all devices you own.
What if I am unhappy with the course?
We would never want you to be unhappy! If you are unsatisfied with your purchase, contact us in the first 30 days and we will give you a full refund.

Get started now!