# Difference between revisions of "Monad tutorials timeline"

From HaskellWiki

(→year 2012: quotes) |
(→before 2000: the man himself->a designer of Haskell, found nothing re. who called it "ne plus ultra"; it's not hefty, by comparison) |
||

Line 17: | Line 17: | ||

== before 2000 == |
== before 2000 == |
||

− | * 1992-08 [http://homepages.inf.ed.ac.uk/wadler/papers/marktoberdorf/baastad.pdf Monads for Functional Programming] - Phil Wadler |
+ | * 1992-08 [http://homepages.inf.ed.ac.uk/wadler/papers/marktoberdorf/baastad.pdf Monads for Functional Programming] (pdf) - Phil Wadler, a designer of Haskell [9126 words] |

− | *: "Shall I be pure or impure?" |
+ | *: "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 [http://www-fp.dcs.st-and.ac.uk/~kh/papers/io-tutorial/io-tutorial.html Monadic IO in Haskell 1.3], Andrew D. Gordon and Kevin Hammond. |
* 1995-05 [http://www-fp.dcs.st-and.ac.uk/~kh/papers/io-tutorial/io-tutorial.html 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 [http://www-users.mat.uni.torun.pl/~fly/materialy/fp/haskell-doc/Monads.html What the hell are Monads?] Noel Winstanley |
* 1999-02 [http://www-users.mat.uni.torun.pl/~fly/materialy/fp/haskell-doc/Monads.html What the hell are Monads?] Noel Winstanley |
||

+ | *: "For our purposes, a monad is a triple of a type and ''then>'' & ''return'' operators defined over it so that the following laws apply: ..." |
||

*: Written when 'what is a monad' started becoming an FAQ. Very short and sweet, advertised as more examples than theory. "Once upon a time, people wrote their Haskell programs by sequencing together operations in an ad-hoc way." |
*: Written when 'what is a monad' started becoming an FAQ. Very short and sweet, advertised as more examples than theory. "Once upon a time, people wrote their Haskell programs by sequencing together operations in an ad-hoc way." |
||

+ | |||

* 1999-Spring [http://www.engr.mun.ca/~theo/Misc/haskell_and_monads.htm Monads for the working Haskell Programmer] - Theodore S. Norvell |
* 1999-Spring [http://www.engr.mun.ca/~theo/Misc/haskell_and_monads.htm Monads for the working Haskell Programmer] - Theodore S. Norvell |
||

*: One of the original tutorials, originally written for Gofer and eventually "updated for Haskell98" |
*: One of the original tutorials, originally written for Gofer and eventually "updated for Haskell98" |

## Revision as of 19:49, 18 August 2012

This timeline covers not just monad tutorials, but interesting events in monad tutorial history.

Please update this list! Don't worry about getting dates, authors, blurbs unless you really want to. We can fix it later.

Older tutorials are especially interesting.

The existence of this page also indicates that a observation made by one of the tutorial authors is actually correct:

- ...it seems like every programmer who
*gets*monads posts a tutorial about them. (And each post begins with: There’s already a lot of monad tutorials on the Internet, but...) The reason is that*getting*monads it’s like a spiritual experience that you want to share with others. (Bartosz Milewski)

## Contents

## before 2000

- 1992-08 Monads for Functional Programming (pdf) - Phil Wadler, a designer of Haskell [9126 words]
- "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
- "For our purposes, a monad is a triple of a type and
*then>*&*return*operators defined over it so that the following laws apply: ..." - Written when 'what is a monad' started becoming an FAQ. Very short and sweet, advertised as more examples than theory. "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

- 1999-Spring Monads for the working Haskell Programmer - Theodore S. Norvell
- One of the original tutorials, originally written for Gofer and eventually "updated for Haskell98"

## year 2002

- 2002 Yet Another Haskell Tutorial (Chapter: Monads) - Hal Daumé III

## year 2003

- 2003-08 All about Monads - Jeff Newbern
- 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.

## year 2004

- 2004-07 A Schemer's Introduction to Monads
- "This will be an introduction to monads from a Lisp/Scheme perspective, with the assumption that the reader is comfortable with continuations, CPS, accumulators, and accumulator-passing style."

- 2004-07 Monads as Containers - Cale Gibbard
- Presents monads as boxes. Uses
`fmap`

and`join`

. "If you will give me a blueberry for each apple I give you`(a -> b)`

, and I have a box of apples`(f a)`

, then I can get a box of blueberries`(f b)`

."

- Presents monads as boxes. Uses
- 2004-08 Monads in Perl - Greg Buchholz
- Written in the spirit of TMTOWTDI

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

## 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!

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

- 2007-02 Crash Course in Monads Monads for Mathematicians
- 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*)

- Eric boils monads down to 15 minutes, using backtracking and Maybe as motivating examples. Eric uses
- 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

- 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,
- 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
- From a discussion about monad tutorials on Haskell Café (the name is due to haskellwiki user 'Green tea').

- 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

- In some ways, a

## year 2008

- 2008-06 Monads (in Russian) and Monads (in English) - Yet another monad tutorial, by Eugene Kirpichov; fairly advanced but skips monad transformers. Oriented towards a broader understanding of monads than just IO and Maybe.
- Monads, Chapter 14 of "Real World Haskell".

## year 2009

- 2009-01 Abstraction, intuition, and the “monad tutorial fallacy” Not a monad tutorial itself, but a comment on monad tutorials and why many of them are so unhelpful.

- 2009-03 A Monad Tutorial for Clojure Programmers An interesting perspective on monads .

- 2009-11 What a Monad is not A desperate attempt to end the eternal chain of monad tutorials

## year 2010

- 2010-07 I come from Java and want to know what monads are in Haskell - Tim Carstens
- An example showing how a simple Java class is translated 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.

- 2010-08 A Fistful of Monads from Learn You a Haskell
- An introduction to monads that builds on applicative functors

- 2010-08 Yet Another Monad Tutorial
- An ongoing sequence of extremely detailed tutorials deriving monads from first principles.

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

- 2011-03 monads in R: sapply and foreach - Ferdinand Jamitzky
- "Monads are a powerful way of structuring functional programs"

- 2011-04 Translation from Haskell to JavaScript of selected portions of the best introduction to monads I’ve ever read - James Coglan [3159 words, Javascript] (cf. 2006 "You Could Have Invented Monads")
- "Monads are really about composing functions"

- 2011-04 Understanding Haskell Monads - Ertugrul Söylemez [12385 words]
- "A monad is a wrapper type around another type (the inner type), which adds a certain structure to the inner type and allows you to combine computations of the inner type in a certain way."

- 2011-10 The Dead Simple, No Chit Chat, Zero-Analogy Haskell Monad Tutorial - Dan Burton [1768 words]
- "Monads are simply Applicative Functors, which also define some way of flattening nested monadic values, and shoving monadic values into monadic functions. Applicative Functors are..."

## year 2012

- 2012-02 Futures: Monads with the Context of Asynchronous Programming - mr23
- "it's best to think of a monad as representing some context. What do I mean by context? ..."

- 2012-02 The Day Python Embarassed Imperative Programming - The 27th Comrade
- "Monads are conditional function calls"

- 2012-02 Scala Monads - Dan Rosen, Marakana [scala, video]

- 2012-04 The Less Travelled Monad Tutorial: Part 1, Part 2 - mightybyte
- "a monad is a certain type of context that provides two things: a way to put things into the context, and function application within the context"

- 2012-04 Why Do Monads Matter? - Chris Smith
- "... The category that they form is called a Kleisli category, and it’s basically another way of looking at monads."