##### Views

(Difference between revisions)

This is a comprehensive timeline of monad tutorials and related articles.

Please update this list as it becomes outdated! If you find a tutorial, article, post, comment, or message that stands on its own as an explanation of monads, then please take a moment to paste the link somewhere on this page (register a throwaway account, if you prefer). The date, author, and blurb can be added later. This will greatly help others who are using this list as a resource for learning about monads.

## 1 before 2000

"Shall I be pure or impure?" ... "A monad is a triple (M; unit; *) consisting of a type constructor M and two operations of the given polymorphic types."
• 1995-05 Monadic IO in Haskell 1.3, Andrew D. Gordon and Kevin Hammond.
"We describe the design and use of monadic I/O in Haskell 1.3"
• 1999-02 What the hell are Monads? - Noel Winstanley [2789 words]
"Once upon a time, people wrote their Haskell programs by sequencing together operations in an ad-hoc way." ... "For our purposes, a monad is a triple of a type and then> & return operators defined over it so that the following laws apply: ..."
"...monads can be used to implement several other programming features including: consuming input, producing output, exceptions and exception handling, nondeterminisim."

## 2 year 2002

• 2002 Yet Another Haskell Tutorial (Chapter: Monads) - Hal Daumé III
"The definition of a monad is a slightly trimmed-down version of our Computation class. The Monad class has four methods ..."

## 3 year 2003

A comprehensive introduction to monads, covering also "advanced" topics like monad transformers and use of some common monads. There is an appendix which presents monads as assembly lines.

## 4 year 2004

• 2004-07 A Schemer's Introduction to Monads - Dave Herman [1736 words, Lisp, Scheme]
"The main insight of monads is that all side effects, from mutation to I/O to non-termination, have one thing in common: order of evaluation matters." ... "So monads are about talking about effects in the context of a pure semantics."
• 2004-07 Monads as Containers - Cale Gibbard
"A monad is a container type together with a few methods defined on it. Monads model different kinds of computations." ... "it is more natural sometimes to begin with map (fmap), return and join"
• 2004-08 Monads in Perl - Greg Buchholz [2171 words, Perl]
"Essentially a monad is a hidden data structure (Fig. 1) which automatically passes state around for us. "

## 5 year 2005

• 2005-07 Monads in Ruby - MenTaLguY
Presents monads in a friendly language, starting from Identity and building on up
• 2005-11 Of monads and space suits - Eric Kow
Functions are space stations, parameters are astronauts and monads are space suits that let us safely travel from one function to another.

## 6 year 2006

• 2006-03 Understanding Monads - Eric Kow
Monads as nuclear waste containers, an adaptation of monads as space suits with a new metaphor suggested by Paul Johnson
• 2006-07 The Monadic Way - Andrea Rossato
A two-part tutorial. The first part shows you how build a simple evaluator, and the second part shows you how to "take the complexity" out of it by using techniques such as monad transformers
• 2006-08 You could have invented monads! (and maybe you already have) - Dan Piponi
"Writing introductions to monads seems to have developed into an industry," Dan (sigfpe) observes. He argues that monads are not "something esoteric in need of explanation", but walks you through the process of reinventing monads to solve some very basic and practical problems.
• 2006-09 Meet Bob The Monadic Lover - Andrea Rossato
Bob embarks upon a series of romantic conquests... bind bind bind, Paula, Luisa, Antonia
• 2006-10 Monad Transformers Step by Step - Martin Grabmüller
• Monad transformers are rarely covered in introductory tutorials. This "is not a paper about implementing transformers, but about using them to write elegant, clean and powerful programs in Haskell". Available as a 12 page PDF or .lhs file.
• 2006-11 There's a Monster in my Haskell! Andrew Pimlott
This delightful "tutorial" presents monads as monsters which devour values, use them to feed other monsters and regurgitate them when slain.
• 2006-12 Maybe Monad in Java - Tony Morris
Monads can also be useful in Java!

## 7 year 2007

• 2007-01 Think of a monad - Don Stewart (reposted on Eric Kow's blog)
Don integrates some pre-existing monadic metaphors, shedding light on monads in a truly comprehensive manner (illustration by Eric)
• 2007-02 Understanding Monads. For Real - Karsten Wagner
A monad is like a macro
Author's Description: This crash course starts with an EASY! introduction to categories and functors, then we define a monad, then give some basic examples of monads in categories, then present monadic terminology as used in programming languages.
Then I lie down in a dark room with a warm wet cloth over my eyes.
• 2007-04 The Real Monad Transformer - Henning Thielemann
Not a tutorial either, but an important aid in demystifying monads
• 2007-03 Monads in 15 Minutes - Eric Kidd
Eric boils monads down to 15 minutes, using backtracking and Maybe as motivating examples. Eric uses
join
, which seems quite rare for monad tutorials (cf Cale's Monads as containers)
• 2007-07 Monads! (and why monad tutorials are all awful) - Colin Gordon?
Csgordon reports that monad tutorials tend to "get horribly botched" and says "[they] either bored me to tears, struck me as completely inane, or simply confused me". He uncovers the early Phil Wadler's paper, Monads for Functional Programming, which not only gives a clear explanation but provides non-trivial motivating examples
• 2007-08 Monads as computation - Cale Gibbard
A very straightforward presentation of monads. Notable for its "The whole point" section, which conveys why we bother with all this monad business.
• 2007-08 Understanding Monads (2) - Apfelmus
Wikibook rewrite of the original monads tutorial. Less fluff, more pedagogy. [In progress at the time of this writing].
• 2007-08 Monad (sans metaphors) - Claus Reinke
• 2007-11 How to do IO in Haskell - Toby Goodwin
In some ways, a non-monad tutorial, describes Haskell IO (with lots and lots of examples) with an emphasis on types, rather than monad theory

## 10 year 2010

An introduction to monads that builds on applicative functors

## 11 year 2011

• 2011-01 Monads for the Curious Programmer: Part 1, Part 2, Part 3, and Monads in C++ - Bartosz Milewski [3405, 4293, 3416, and 5244 words]
"Monads are hard to describe because they don’t correspond to anything in our everyday experience" ... "A monad is an endofunctor together with two special families of morphisms, both going vertically, one up and one down"