Effectful Haskell

Monads are a tricky subject. So tricky in fact, that most of the material out there about them is either a.) focused on surface level questions like "what is a monad" or b.) aimed at really abstract details like "how do monads relate to category theory". But there's not nearly as much content about how to use monads in a larger project context.

It's one thing to know what a monad is and how to write basic monadic code. But this will only give you a small amount of the power of monads! As you build more complex Haskell programs, monads can make your life a lot easier...if you know how to use them!

So how does one learn these techniques?

The answer of course, is with hands on practice. And Monday Morning Haskell has just the tool you need for that! Effectful Haskell is our short course aimed at teaching you the techniques to use monads to organize all the various effects in your system. You'll learn:

  1. How to construct a monad that encapsulates all the various effects in your system.
  2. How to use monad classes to perform IO actions while limiting the scope of your different functions.
  3. How free monads can make it outrageously simple to configure and modify the behavior of your program, like changing your underlying database layer, or adding mock test effects.
  4. And as an extra bonus, you'll also get a primer on how to deploy a Haskell application to the web using Heroku!

If this checks all the boxes for what you'd like to learn, head over to the course page to get started!

To learn more details (and FAQ), read on!

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 has roughly 3 different parts. Here are the different areas you'll cover:

Building an App Monad

After a quick review of monads and especially monad transformers, we'll learn how to build an "App Monad" that encapsulates the many different effects we want within our system. We'll start with a simple practice application, but then we'll apply these ideas to a fully operational web server!

Monad Classes

Once we've enumerated the different effects in our system, we'll learn some more advanced ways to access these effects. We'll use monads to delineate the exact functionality we can expect from various functions so our application has clear boundaries. We'll write functions that ultimately perform IO activity (like accessing a database) even without arbitrary IO access.

Free Monads

Next, we'll learn about "Free Monads", an interesting concept that can accomplish the effect separation we get from monad classes while reducing our boilerplate. We'll explore the different customization options we can get with free monads, especially when it comes to making our system more testable.

Deploying a Basic Application

To conclude the course, you'll get a quick run-down of how to launch a fully configurable Haskell application on Heroku and deploy it to the cloud!

FAQ

How are course materials delivered?

The course has a .zip file that you can download, containing a buildable Haskell project. You can also sign up for the private GitHub repository that you can clone or fork so that you can get updates more easily.

How long can I access course material?

Purchasing this course grants lifetime access to the material. If you don't have time to go through it now, you can always leave it for later!

What if I get stuck on something?

You'll be able to email the instructor for help. You'll also be able to download a separate .zip file (or fetch a separate Git branch) that has all the answers for each exercise.

What if I don't like the course?

This course comes with a 14-day refund guarantee. If you don't like the course, you can get a full refund within 14 days, no questions asked.

If you have any more questions, you can send an email to james@mondaymorninghaskell.me! Once you're ready to buy, head to the course page to make your purchase!