*: Explains the relationships between the various abstractions over side effects, namely applicative functors, arrows, and monads.

* 2010-07 [https://intoverflow.wordpress.com/2010/07/20/i-come-from-java-and-want-to-know-what-monads-are-in-haskell/ I come from Java and want to know what monads are in Haskell] - Tim Carstens [Java]

* 2010-07 [https://intoverflow.wordpress.com/2010/07/20/i-come-from-java-and-want-to-know-what-monads-are-in-haskell/ I come from Java and want to know what monads are in Haskell] - Tim Carstens [Java]

Line 183:

Line 184:

*: "... The category that they form is called a Kleisli category, and it’s basically another way of looking at monads."

*: "... The category that they form is called a Kleisli category, and it’s basically another way of looking at monads."

Revision as of 20:46, 23 April 2013

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.

"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: ..."

4 year 2004

"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."

5 year 2005

"They let you chain pass [bind] operations together to make little computational pipelines, with rules of your choosing. They don’t manipulate values themselves — that’s the job of the blocks (functions) you plumb together using the monad."

6 year 2006

Monads as nuclear waste containers, an adaptation of monads as space suits with a new metaphor suggested by Paul Johnson

"What we need is some way to capture the pattern 'do X and then do Y, where Y may be affected by X'. Monads are the way we do this." ... "In a sense, each monad is its own little minilanguage specially suited for its particular task."

"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.

"So now I can reveal what a monad is. The triple of objects (m,unit,bind) is the monad, and to be a monad they must satisfy a bunch of laws such as the ones you've been proving."

"I think of monads as computational environments in which you get to make up the rules." ... "monads are ... a general model of computation that lets you pick and choose the environmental features that you want for your computations."

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.

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.

8 year 2008

"The best way to grok monads is to ... familiarize yourself with several common monads and their uses." ... "All that makes a monad, really, is that you can define two functions like unit and bind on them."

"A monad is a triple (m, return, >>=), where: ..." ... "As we progressed, we saw that monads are most commonly used for two different purposes: structuring the control flow and describing imperative effectful computations (IO, State, IndentIO), and structuring data flow (Maybe, List, Dist)."

"An alternative term is computation builder which is a bit more descriptive of what they are actually useful for." ... "In layman's terms, a monad is just a type for which the >>= operation is defined."

9 year 2009

Commentary on monad tutorials and why many may be so unhelpful. "What I term the 'monad tutorial fallacy,' then, consists in failing to recognize the critical role that struggling through fundamental details plays in the building of intuition."

Translates a simple Java class into a stack of monad transformers, with a metaphor about how monads are like conversations, and why this idea should be familiar to OO programmers.

"What I am going to talk about is how to use monads to do something in Haskell that is easy to do in Java." ... "This is what different monads do: each comes with its own set of operations that are legal within the context that the monad is modeling."

"The original sentence is this: All told, a monad in X is just a monoid in the category of endofunctors of X, with product × replaced by composition of endofunctors and unit set by the identity endofunctor."

11 year 2011

"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"