Difference between revisions of "Monad tutorials timeline"
Jump to navigation
Jump to search
Egonschiele (talk | contribs) m |
m |
||
(107 intermediate revisions by 18 users not shown) | |||
Line 1: | Line 1: | ||
[[Category:History]] |
[[Category:History]] |
||
+ | [[Category:Humor]] |
||
[[Category:Monad]] |
[[Category:Monad]] |
||
+ | [[Category:Timelines]] |
||
[[Category:Tutorials]] |
[[Category:Tutorials]] |
||
Line 8: | Line 10: | ||
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. |
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. |
||
+ | |||
+ | __TOC__ |
||
+ | |||
+ | <br> |
||
+ | <font size="+1"> |
||
+ | “All told, a monad in <i>X</i> is just a monoid in the category of endofunctors of <i>X</i>, with product × replaced by composition of endofunctors and unit set by the identity endofunctor.” |
||
+ | </font> |
||
+ | :[https://archive.org/details/categoriesforwor0000macl Categories for the Working Mathematician], Saunders Mac Lane. |
||
== before 2000 == |
== before 2000 == |
||
+ | * 1992-02 (published date) [https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.41.9361&rep=rep1&type=pdf The essence of functional programming] - Philip 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 [9100 words] |
||
+ | *: "This paper explores the use monads to structure functional programs. No prior knowledge of monads or category theory is required." |
||
− | *: "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." |
||
+ | * 1992-08 [http://homepages.inf.ed.ac.uk/wadler/papers/marktoberdorf/baastad.pdf Monads for Functional Programming] (pdf) - Phil Wadler, a designer of Haskell [9100 words]. <!-- Note that this PDF (SHA256: 72789512288e3229ea8d82fdf3a8d9787be7f1578dce609e27259fa999892f2e) seems to be from 1996, according to the TeX error on page 14. It has a reference dated 1995. --> |
||
− | * 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 |
||
+ | *: "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 [https://web.archive.org/web/20140303101716/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 (PDF: [https://web.archive.org/web/20210429180440/www.microsoft.com/en-us/research/wp-content/uploads/1995/01/io-tutorial.pdf paper], [https://www.haskell.org/haskell-workshop/1995/HW1995-Proceedings.pdf conference proceedings]) |
||
*: "We describe the design and use of monadic I/O in Haskell 1.3" |
*: "We describe the design and use of monadic I/O in Haskell 1.3" |
||
− | * 1999-02 [http://www |
+ | * 1999-02 [https://web.archive.org/web/19991018214519/http://www.dcs.gla.ac.uk/~nww/Monad.html What the hell are Monads?] - Noel Winstanley [2800 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 |
+ | *: "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: ..." |
+ | |||
+ | == year 2000 == |
||
− | * |
+ | * 2000-01 [http://www.engr.mun.ca/~theo/Misc/haskell_and_monads.htm Monads for the working Haskell Programmer] - Theodore S. Norvell [4200 words, Haskell98, Gofer] |
*: "...monads can be used to implement several other programming features including: consuming input, producing output, exceptions and exception handling, nondeterminisim." |
*: "...monads can be used to implement several other programming features including: consuming input, producing output, exceptions and exception handling, nondeterminisim." |
||
== year 2002 == |
== year 2002 == |
||
− | * 2002 [ |
+ | * 2002 [https://en.wikibooks.org/wiki/Yet_Another_Haskell_Tutorial/Monads 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 ..." |
*: "The definition of a monad is a slightly trimmed-down version of our Computation class. The Monad class has four methods ..." |
||
== year 2003 == |
== year 2003 == |
||
− | * 2003-08 [ |
+ | * 2003-08 [[All About Monads]] - Jeff Newbern [22600 words] (Japanese translation: [http://www.sampou.org/haskell/a-a-monads/html/index.html モナドのすべて]) |
*: A comprehensive introduction. Covers monad transformers and some common monads. An appendix presents monads as assembly lines. |
*: A comprehensive introduction. Covers monad transformers and some common monads. An appendix presents monads as assembly lines. |
||
*:"A monad is a way to structure computations in terms of values and sequences of computations using those values." |
*:"A monad is a way to structure computations in terms of values and sequences of computations using those values." |
||
Line 68: | Line 83: | ||
*: "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." |
*: "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." |
||
+ | * 2009-06 [https://web.cecs.pdx.edu/~sheard/course/AdvancedFP/notes/MonadsPart1.pdf Monads: Computations where order matters] - Tim Sheard |
||
* 2006-10 [http://www.reddit.com/r/programming/comments/ox6s/ask_reddit_what_the_hell_are_monads/coxiv Ask Reddit: What the hell are monads?, an answer] - tmoertel [700 words] |
* 2006-10 [http://www.reddit.com/r/programming/comments/ox6s/ask_reddit_what_the_hell_are_monads/coxiv Ask Reddit: What the hell are monads?, an answer] - tmoertel [700 words] |
||
*: "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." |
*: "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." |
||
− | * 2006-10 [ |
+ | * 2006-10 [https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.71.596 Monad Transformers Step by Step] - Martin Grabmüller (also: [https://web.archive.org/web/20170720145439/http://catamorph.de/documents/Transformers.pdf updated version] and associated [https://github.com/bookshelfdave/monad-transformers-step-by-step Haskell code]) |
*: 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. |
*: 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. |
||
Line 84: | Line 100: | ||
* 2007-01 [http://koweycode.blogspot.com/2007/01/think-of-monad.html Think of a monad] - Don Stewart (reposted on Eric Kow's blog) |
* 2007-01 [http://koweycode.blogspot.com/2007/01/think-of-monad.html 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) |
*: Don integrates some pre-existing monadic metaphors, shedding light on monads in a truly comprehensive manner (illustration by Eric) |
||
+ | |||
* 2007-02 [http://kawagner.blogspot.com/2007/02/understanding-monads-for-real.html Understanding Monads. For Real] - Karsten Wagner |
* 2007-02 [http://kawagner.blogspot.com/2007/02/understanding-monads-for-real.html Understanding Monads. For Real] - Karsten Wagner |
||
*: A monad is like a macro |
*: A monad is like a macro |
||
+ | |||
− | * 2007-02 [http://patryshev.com/monad/m-intro.html Crash Course in Monads] Monads for Mathematicians |
||
+ | * 2007-02 [http://patryshev.com/monad/m-intro.html Crash Course in Monads] Monads for Mathematicians - Vlad Patryshev |
||
*: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. |
*: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-03 [http://www.randomhacks.net/2007/03/12/monads-in-15-minutes/ Monads in 15 Minutes] - Eric Kidd |
||
− | * 2007-04 [http://saxophone.jpberlin.de/MonadTransformer?source=http%3A%2F%2Fwww%2Ehaskell%2Eorg%2Fhaskellwiki%2FCategory%3AMonad&language=English The Real Monad Transformer] - Henning Thielemann |
||
− | *: Not a tutorial either, but an important aid in demystifying monads |
||
− | * 2007-03 [http://www.randomhacks.net/articles/2007/03/12/monads-in-15-minutes Monads in 15 Minutes] - Eric Kidd |
||
*: Eric boils monads down to 15 minutes, using backtracking and Maybe as motivating examples. Eric uses <hask>join</hask>, 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 <hask>join</hask>, which seems quite rare for monad tutorials (cf Cale's ''Monads as containers'') |
||
+ | *: Then I lie down in a dark room with a warm wet cloth over my eyes. |
||
+ | |||
* 2007-08 [[Monads as computation]] - Cale Gibbard |
* 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. |
*: 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 [http://en.wikibooks.org/wiki/Haskell/Understanding%20monads Understanding Monads] (2) - Apfelmus |
||
+ | * 2007-08 [https://en.wikibooks.org/wiki/Haskell/Understanding_monads Understanding Monads] (2) - Apfelmus |
||
*: Wikibook rewrite of the original monads tutorial. Less fluff, more pedagogy. [In progress at the time of this writing]. |
*: 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-08 [[Monad (sans metaphors)]] - Claus Reinke |
||
*: From a discussion about monad tutorials on Haskell Café (the name is due to haskellwiki user 'Green tea'). |
*: 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 |
||
+ | * 2007-09 [https://james-iry.blogspot.com/2007/09/monads-are-elephants-part-1.html Monads are Elephants Part 1] - James Iry |
||
− | *: 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 |
||
+ | *:"Introductions to monads are bit of cottage industry on the Internet. So I figured, "why buck tradition?" But this article will present Scala's way of dealing with monads." |
||
== year 2008 == |
== year 2008 == |
||
Line 106: | Line 127: | ||
* 2008-01 [http://www.reddit.com/r/programming/comments/64th1/monads_in_python_in_production_code_you_can_and/c02u9mb An explanation by 808140] [1588 words] |
* 2008-01 [http://www.reddit.com/r/programming/comments/64th1/monads_in_python_in_production_code_you_can_and/c02u9mb An explanation by 808140] [1588 words] |
||
*: "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." |
*: "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." |
||
− | |||
− | * 2008-06 [http://spbhug.folding-maps.org/wiki/Monads Monads] (in Russian, [http://spbhug.folding-maps.org/wiki/MonadsEn English translation]) - Eugene Kirpichov [8200 words ru, 10000 en] |
||
− | *: "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)." |
||
* 2008-03 [http://book.realworldhaskell.org/read/monads.html Real World Haskell, Chapter 14: Monads] - Bryan O'Sullivan, Don Stewart, and John Goerzen |
* 2008-03 [http://book.realworldhaskell.org/read/monads.html Real World Haskell, Chapter 14: Monads] - Bryan O'Sullivan, Don Stewart, and John Goerzen |
||
*: "We aim to show you that a monad is often an obvious and useful tool to help solve a problem." |
*: "We aim to show you that a monad is often an obvious and useful tool to help solve a problem." |
||
+ | |||
+ | * 2008-06 [http://spbhug.folding-maps.org/wiki/Monads Monads] (in Russian, [http://spbhug.folding-maps.org/wiki/MonadsEn English translation]) - Eugene Kirpichov [8200 words ru, 10000 en] |
||
+ | *: "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)." |
||
* 2008-09 [http://stackoverflow.com/a/194207 What is a monad?, an answer] - JacquesB (other answers at link) |
* 2008-09 [http://stackoverflow.com/a/194207 What is a monad?, an answer] - JacquesB (other answers at link) |
||
*: "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." |
*: "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." |
||
+ | |||
+ | * 2008-12 [http://blog.sigfpe.com/2008/11/from-monoids-to-monads.html From Monoids to Monads] - Dan Piponi |
||
== year 2009 == |
== year 2009 == |
||
Line 128: | Line 151: | ||
*2009-06 [http://www.muitovar.com/monad/moncow.html The Greenhorn's Guide to becoming a Monad Cowboy] - Hans van Thiel [9600 words] |
*2009-06 [http://www.muitovar.com/monad/moncow.html The Greenhorn's Guide to becoming a Monad Cowboy] - Hans van Thiel [9600 words] |
||
*:Covers basics, with simple examples, in a ''for dummies'' style. Includes monad transformers and monadic functions. "Actually, programming monads is much like cattle driving! So, let's get started." |
*:Covers basics, with simple examples, in a ''for dummies'' style. Includes monad transformers and monadic functions. "Actually, programming monads is much like cattle driving! So, let's get started." |
||
+ | |||
+ | *2009-10 [http://brandon.si/code/the-state-monad-a-tutorial-for-the-confused/ The State Monad: A Tutorial for the Confused?] - Brandon Simmons |
||
+ | *:This is written for someone who has a good understanding of the Maybe and List monads, but has gotten stuck trying to understand State... State monad is just an abstraction for a function that takes a state and returns an intermediate value and some new state value. |
||
+ | |||
+ | * 2009-11 [http://data.tmorris.net/talks/what-does-monad-mean/what-does-monad-mean/chunk-html/index.html What Does Monad Mean?] - Tony Morris |
||
+ | *: "The [''monad''] concept will be presented in a way with the objective of supplying enough understanding to apply the practical implications and will not address the underlying mathematics or category theory." |
||
* 2009-11 [[What a Monad is not]] |
* 2009-11 [[What a Monad is not]] |
||
Line 134: | Line 163: | ||
== year 2010 == |
== year 2010 == |
||
+ | * 2010-02 [https://www.inf.ed.ac.uk/teaching/courses/apl/2009-2010/slides/apl9.pdf Advances in Programming Languages: Monads and I/O] - Ian Stark |
||
* 2010-03 [http://strabismicgobbledygook.wordpress.com/2010/03/06/a-state-monad-tutorial/ State Monad Tutorial] - Byron Johnson |
* 2010-03 [http://strabismicgobbledygook.wordpress.com/2010/03/06/a-state-monad-tutorial/ State Monad Tutorial] - Byron Johnson |
||
*: "My goal is to teach others to help them understand the State monad. ... After this point, you should be able to easily understand the other monads." |
*: "My goal is to teach others to help them understand the State monad. ... After this point, you should be able to easily understand the other monads." |
||
Line 140: | Line 170: | ||
*: Explains the relationships between the various abstractions over side effects, namely applicative functors, arrows, and monads. |
*: Explains the relationships between the various abstractions over side effects, namely applicative functors, arrows, and monads. |
||
+ | * 2010-06 [https://www.cs.nott.ac.uk/~psznhn/LiU-FP2010-PartII/LectureNotes/lecture06.pdf More about Monads and Other Notions of Effectful Computation] - Henrik Nilsson |
||
* 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] |
||
*: 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. |
*: 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. |
||
Line 152: | Line 183: | ||
* 2010-10 [http://stackoverflow.com/a/3870310 A monad is just a monoid in the category of endofunctors, what's the problem?, an answer] - pelotom (other answers at link) |
* 2010-10 [http://stackoverflow.com/a/3870310 A monad is just a monoid in the category of endofunctors, what's the problem?, an answer] - pelotom (other answers at link) |
||
*: "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." |
*: "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." |
||
+ | |||
+ | * 2010-11 [https://www.it.uu.se/edu/course/homepage/avfunpro/ht10/notes/glimming-4up.pdf Monads and Effects in Purely Functional Programming (slides)] - Johan Glimming |
||
== year 2011 == |
== year 2011 == |
||
* 2011-01 [http://bartoszmilewski.wordpress.com/2011/01/09/monads-for-the-curious-programmer-part-1/ Monads for the Curious Programmer: Part 1], [http://bartoszmilewski.wordpress.com/2011/03/14/monads-for-the-curious-programmer-part-2/ Part 2], [http://bartoszmilewski.wordpress.com/2011/03/17/monads-for-the-curious-programmer-part-3/ Part 3], and [http://bartoszmilewski.wordpress.com/2011/07/11/monads-in-c/ Monads in C++] - Bartosz Milewski [3400, 4300, 3400, and 5200 words] |
* 2011-01 [http://bartoszmilewski.wordpress.com/2011/01/09/monads-for-the-curious-programmer-part-1/ Monads for the Curious Programmer: Part 1], [http://bartoszmilewski.wordpress.com/2011/03/14/monads-for-the-curious-programmer-part-2/ Part 2], [http://bartoszmilewski.wordpress.com/2011/03/17/monads-for-the-curious-programmer-part-3/ Part 3], and [http://bartoszmilewski.wordpress.com/2011/07/11/monads-in-c/ Monads in C++] - Bartosz Milewski [3400, 4300, 3400, and 5200 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" |
*: "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 [https://patrickmacarthur.net/talks/cs595-monads.pdf Monads: Safe Side-effects in Functional Programs] - Patrick Macarthur |
||
* 2011-03 [http://scscript.blogspot.de/2011/03/monads-in-r-sapply-and-foreach.html monads in R: sapply and foreach] - Ferdinand Jamitzky |
* 2011-03 [http://scscript.blogspot.de/2011/03/monads-in-r-sapply-and-foreach.html monads in R: sapply and foreach] - Ferdinand Jamitzky |
||
*: "Monads are a powerful way of structuring functional programs" |
*: "Monads are a powerful way of structuring functional programs" |
||
− | * 2011-04 [http://blog.jcoglan.com/2011/03/05/translation-from-haskell-to-javascript-of-selected-portions-of-the-best-introduction-to-monads-ive-ever-read/ Translation from Haskell to JavaScript of selected portions of the best introduction to monads |
+ | * 2011-04 [http://blog.jcoglan.com/2011/03/05/translation-from-haskell-to-javascript-of-selected-portions-of-the-best-introduction-to-monads-ive-ever-read/ Translation from Haskell to JavaScript of selected portions of the best introduction to monads I¢ve ever read] - James Coglan [3200 words, Javascript] (cf. 2006 "You Could Have Invented Monads") |
*: "Monads are really about composing functions" |
*: "Monads are really about composing functions" |
||
− | * 2011-04 [http://ertes.de/articles/monads.html Understanding Haskell Monads] - Ertugrul Söylemez [12400 words] |
+ | * 2011-04 [https://web.archive.org/web/20120626020258/http://ertes.de/articles/monads.html Understanding Haskell Monads] - Ertugrul Söylemez [12400 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." |
*: "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 [http://unknownparallel.com/monads.php The Dead Simple, No Chit Chat, Zero-Analogy Haskell Monad Tutorial] - Dan Burton [1800 words] |
+ | * 2011-10 [http://web.archive.org/web/20120117061438/http://unknownparallel.com/monads.php The Dead Simple, No Chit Chat, Zero-Analogy Haskell Monad Tutorial] - Dan Burton [1800 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..." |
*: "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..." |
||
Line 183: | Line 218: | ||
* 2012-04 [http://cdsmith.wordpress.com/2012/04/18/why-do-monads-matter/ Why Do Monads Matter?] - Chris Smith |
* 2012-04 [http://cdsmith.wordpress.com/2012/04/18/why-do-monads-matter/ 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." |
*: "... The category that they form is called a Kleisli category, and it’s basically another way of looking at monads." |
||
+ | |||
+ | * 2012-08 [http://newartisans.com/2012/08/monads-in-pictures/ Monads in Pictures] - johnw |
||
+ | *: "This is not a tutoral on monads, nor will I use any math terms here. This is for people who have learned enough about monads to use them, but want to get a better picture of what they’re doing and why they exist." |
||
+ | |||
+ | * 2012-11 [http://cswords.com/paper/alamode.pdf Monads à la Mode] - Cameron Swords and Daniel P. Friedman |
||
+ | *: "The purpose of this article is to provide a concise introductionto monads for anyone who has an understanding of Scheme and simple types." |
||
== year 2013 == |
== year 2013 == |
||
+ | * 2013-01 [https://www.kovach.me/posts/2013-01-02-intro-monads.html Monads in Haskell: An Introduction] - Benjamin Kovach |
||
+ | * 2013-03 [http://blog.leahhanson.us/post/monad-tutorial.html A Simple Monad Tutorial] - Leah Hanson |
||
* 2013-04 [http://adit.io/posts/2013-04-17-functors,_applicatives,_and_monads_in_pictures.html Functors, Applicatives, And Monads In Pictures]. |
* 2013-04 [http://adit.io/posts/2013-04-17-functors,_applicatives,_and_monads_in_pictures.html Functors, Applicatives, And Monads In Pictures]. |
||
+ | * 2013-04 [http://www.alpheccar.org/content/60.html A newbie in Haskell land] |
||
+ | *: "I have identified three kinds of monads ... Monad as control of the sequencing ; Monad as control of side effects ; Monad as container" |
||
+ | ** other articles: |
||
+ | *** [http://www.alpheccar.org/content/61.html (->) monad] |
||
+ | *** [http://www.alpheccar.org/content/67.html Haskell Study Plan] |
||
+ | *** [http://www.alpheccar.org/content/74.html Category Theory and the category of Haskell programs : parts 1], [http://www.alpheccar.org/content/76.html 2] and [http://www.alpheccar.org/content/77.html 3] |
||
+ | *** [http://www.alpheccar.org/content/86.html Coproduct of free monads and web development] |
||
+ | *** [http://www.alpheccar.org/content/87.html A Web Monad] |
||
+ | *** [http://www.alpheccar.org/content/90.html Meaning and monads] |
||
+ | * 2013-05 [http://mergeconflict.com/kleisli-composition-a-la-up-goer-five/ Kleisli Composition à la Up-Goer Five]. |
||
+ | * 2013-06 [http://adit.io/posts/2013-06-10-three-useful-monads.html Three Useful Monads] |
||
+ | * 2013-07 [http://www.stephendiehl.com/posts/monads.html Monads Made Difficult] |
||
+ | * 2013-08 [http://www.stephendiehl.com/posts/adjunctions.html From Adjunctions to Monads] |
||
+ | * 2013-08 [http://izbicki.me/blog/functors-and-monads-for-analyzing-data Functors and monads for analyzing data] |
||
+ | * 2013-08 [https://www.fpcomplete.com/school/starting-with-haskell/basics-of-haskell/3-pure-functions-laziness-io Pure Functions, Laziness, I/O, and Monads] |
||
+ | * 2013-08 [https://www.fpcomplete.com/school/starting-with-haskell/basics-of-haskell/10_Error_Handling Error Handling] |
||
+ | * 2013-08 [https://www.fpcomplete.com/school/starting-with-haskell/basics-of-haskell/12-State-Monad State monad] |
||
+ | * 2013-10 [https://www.cs.hmc.edu/~adavidso/monads.pdf Monads and Side Effects in Haskell] - Alan Davidson |
||
+ | * 2013-10 [https://sean.voisen.org/blog/2013/10/intro-monads-maybe A gentle intro to monads ... maybe?] - Sean Voisen |
||
+ | * 2013-12 [http://www.cakesolutions.net/teamblogs/2013/12/29/monad-transformers/ Monad transformers] |
||
+ | * 2013-12 [https://www.fpcomplete.com/school/starting-with-haskell/basics-of-haskell/the-tao-of-monad The tao of monad] |
||
+ | * 2013-12 [https://nikgrozev.com/2013/12/10/monads-in-15-minutes Monads in 15 minutes] - Nikolay Grozev |
||
+ | * 2013-12 [https://homepages.inf.ed.ac.uk/wadler/papers/yow/monads-haskell.pdf The First Monad Tutorial (slides)] - Philip Wadler |
||
+ | == year 2014 == |
||
+ | * 2014-01 [http://www.mjoldfield.com/atelier/2014/01/monads-algebra.html Monads in Haskell: Algebra] |
||
+ | * 2014-01 [http://www.idryman.org/blog/2014/01/23/yet-another-monad-tutorial/ Yet Another Monad Tutorial in 15 Minutes] |
||
+ | * 2014-01 [http://profectium.blogspot.com/2014/01/using-monads-in-haskell.html Using Monads in Haskell] |
||
+ | * 2014-01 [http://www.mjoldfield.com/atelier/2014/01/monads-list.html Monads in Haskell: Lists &c] |
||
+ | * 2014-01 [http://www.cs.nott.ac.uk/~gmh/monads PROGRAMMING WITH EFFECTS] |
||
+ | * 2014-02 [http://www.stephendiehl.com/posts/monads.html monads made difficult] |
||
+ | * 2014-03 [https://www.fpcomplete.com/school/starting-with-haskell/basics-of-haskell/10_Error_Handling Error Handling] |
||
+ | * 2014-03 [http://www.johndcook.com/blog/2014/03/03/monads-are-hard-because/ Monads are hard because...] |
||
+ | * 2014-04 [http://www.haskellforall.com/2014/04/how-continuation-monad-works.html How continuation monad works] |
||
+ | * 2014-04 [https://queue.acm.org/detail.cfm?id=2611829 "Mostly functional" programming does not work: Informal Introduction to Monads] |
||
+ | * 2014-05 [https://blog.jle.im/entry/inside-my-world-ode-to-functor-and-monad Inside My World (Ode to Functor and Monad)] |
||
+ | * 2014-06 [https://www.nondeterminism.de Functor, Applicative, Monad] |
||
+ | * 2014-07 [https://blog.jle.im/entry/first-class-statements.html First-Class "Statements"] - Justin Le |
||
+ | * 2014-10 [http://codon.com/refactoring-ruby-with-monads Refactoring Ruby with Monads] |
||
+ | * 2014-12 [https://www21.in.tum.de/teaching/perlen/WS1415/unterlagen/Monads_in_Haskell.pdf Monads in Haskell] - Nathanael Schilling |
||
− | == |
+ | == year 2015 == |
+ | * 2015-03 [https://www.cis.upenn.edu/~cis194/spring15/lectures/07-monads.html Monads] |
||
+ | * 2015-04 [https://zohaib.me/yet-another-what-is-a-monad-post Yet another "What is a Monad" post] - Zohaib Rauf |
||
+ | * 2015-07 [https://fsharpforfunandprofit.com/posts/monadster Dr Frankenfunctor and the Monadster] |
||
+ | *: "Or, how a 19th century scientist nearly invented the state monad." |
||
+ | * 2015-08 [https://blog.reverberate.org/2015/08/monads-demystified.html Monads Demystified] - Josh Haberman |
||
+ | * 2015-09 [https://khanlou.com/2015/09/what-the-heck-is-a-monad What the Heck Is a Monad] - Soroush Khanlou |
||
+ | * 2015-11 [https://codetalk.io/posts/2015-11-28-briefly-on-the-purpose-of-functors-applicatives-and-monads.html Briefly on the purpose of Functors, Applicatives and Monads] |
||
+ | * 2015-11 [https://www.cs.cornell.edu/~akhirsch/monads.html A 5-Minute Monad Tutorial] - Andrew Hirsch |
||
+ | == year 2016 == |
||
− | * [http://www.alpheccar.org/content/60.html ] |
||
+ | * 2016-04 [https://engineering.sharethrough.com/blog/2016/04/18/explaining-monads-part-1 Monads are confusing. Let us help] - Kelley Robinson |
||
− | *: "I have identified three kinds of monads ... Monad as control of the sequencing ; Monad as control of side effects ; Monad as container" |
||
+ | * 2016-05 [https://gist.github.com/eatonphil/20927ccf9f59c6b47c48002e147aa45c eatonphil/monad.ml] - Phil Eaton |
||
+ | *:"I finally grasped the use of monads while building linux images." |
||
+ | * 2016-09 [https://medium.com/@franzejr/a-quick-intro-about-monads-291e50dda062 A quick intro about Monads] - franzejr |
||
+ | * 2016-09 [https://cs.pomona.edu/~michael/courses/csci131f16/downloads/lec12.pdf CSC 131: Haskell Monads] - Kim Bruce |
||
+ | * 2016-10 [https://www.ahnfelt.net/monads-forget-about-bind Monads (forget about bind)] - Joakim Ahnfelt-Ronne |
||
+ | * 2016-10 [https://nickhu.co.uk/Monads.pdf Understanding Monads: From types to categories to analogy] - Nick Hu |
||
+ | * 2016-10 [https://www.seas.upenn.edu/~cis1940/fall16/lectures/06-io-and-monads.html CIS 194: IO and monads] - Joachim Breitner |
||
+ | * 2016-11 [https://bartoszmilewski.com/2016/11/21/monads-programmers-definition Monads: Programmer’s Definition] - Bartosz Milewski |
||
+ | ** from the [https://bartoszmilewski.com/2014/10/28/category-theory-for-programmers-the-preface Category Theory for Programmers] series. |
||
+ | |||
+ | * 2016-12 [https://rmarcus.info/blog/2016/12/14/monads.html No, really, what's a monad?] - Ryan Marcus |
||
+ | *:"When seasoned Haskell developers try to explain monads to the rest of us, they’ll often find themselves resorting to ridiculously incomprehensible definitions." |
||
+ | |||
+ | == year 2017 == |
||
+ | * 2017-03 [https://lamda.blog/2017/03/27/functors-and-monads Functors & Monads: An Introduction] - Miguel Fonseca |
||
+ | |||
+ | * 2017-05 [https://blog.scottnonnenberg.com/what-s-a-monad-digging-into-haskell/#well-whats-a-monad Well, What's a Monad?] - Scott Nonnenberg |
||
+ | |||
+ | * 2017-06 [https://www.datio.com/development/knowing-monads-through-the-category-theory Knowing monads through the category theory] - Juan López López |
||
+ | * 2017-06 [https://www.inf.ed.ac.uk/teaching/courses/inf1/fp/lectures/2017/lect15.pdf Informatics 1: IO and Monads] - Don Sannella |
||
+ | * 2017-08 [https://binaryanalysisplatform.github.io/bap/api/master/monads/Monads/Std/index.html#intro Monads.Std - Introduction (from the Binary Analysis Platform's included monads library)] - Ivan Gotovchits |
||
+ | |||
+ | * 2017-11 [https://www.infoq.com/articles/Understanding-Monads-guide-for-perplexed Understanding Monads. A Guide for the Perplexed] - Barry Burd |
||
+ | *: "With the current explosion of functional programming, the 'monad' functional structure is once again striking fear into the hearts of newcomers." |
||
+ | |||
+ | * 2017-11 [https://diego.codes/post/learning-monads Learning Monads by Example] - Diego Vicente |
||
+ | *: "While writing my bachelor thesis, a heuristic search framework in Haskell, I ran into a roadblock I long feared to have: I needed to understand how monads work." |
||
+ | |||
+ | == year 2018 == |
||
+ | * 2018-05 [https://tech.opentable.co.uk/posts/monads-explained-by-a-imperative-programmer Monads explained by a imperative programmer - with examples] - Dipun Mistry |
||
+ | *:"A monad is any type construct that follows a specific pattern; it works in the same way as other design patterns." |
||
+ | |||
+ | * 2018-05 [https://kubuszok.com/2018/different-ways-to-understand-a-monad Different ways to understand a monad] - Mateusz Kubuszok |
||
+ | *: ... "hardly anyone is good at explaining what a monad is. That is why we’ll try to get some intuition about it without defining it." |
||
+ | |||
+ | * 2018-09 [https://www.cs.cornell.edu/courses/cs3110/2018fa/lec/16-monads/lec.pdf CS3110: Monads] - Professor Clarkson |
||
+ | *:"Attendance question: Have you programmed with monads in Haskell?" |
||
+ | |||
+ | * 2018-12 [https://garlandus.co/OfGroupsAndMonads.html Of Groups and Monads] |
||
+ | *: An introduction by way of the simpler notion of a group, with some historical context |
||
+ | |||
+ | == year 2019 == |
||
+ | * 2019-03 [https://kjaer.io/a-monad-is-not-a-burrito A monad is not a burrito] - Maxime Kjaer |
||
+ | *:"... monads are something that took a while to click in my head, too." |
||
+ | |||
+ | * 2019-04 [https://engineering.talkdesk.com/monads-made-simple-f2376247391c "Monads made simple"] - Carlos Morgado |
||
+ | *: "Most talk/post/discussion about monads try to teach you Haskell first." |
||
+ | |||
+ | * 2019-04 [https://mmhaskell.com/monads/tutorial Monads Tutorial] - ''Monday Morning Haskell'' |
||
+ | *: "[...] here's my crack at a definition: A Monad wraps a value or a computation with a particular '''context'''." |
||
+ | |||
+ | * 2019-08 [https://samgrayson.me/2019-08-06-monads-as-a-programming-pattern Monads as a Programming Pattern] - Sam Grayson |
||
+ | *: "This article is written from a programmer’s perspective, where a monad is a ''software engineering pattern''." |
||
+ | |||
+ | * 2019-09 [https://www.cs.columbia.edu/~sedwards/classes/2019/4995-fall/monads.pdf Monads] - Stephen Edwards |
||
+ | * 2019-12 [https://www.bekk.christmas/post/2019/5/an-overview-of-the-monad An Overview of the Monad] - Ragnhild Aalvik |
||
+ | *: "In this article I will give a brief overview of what a ''monad'' is. [...] I will use metaphors to explain the concept, and I will ''not'' give any code examples in this article." |
||
+ | |||
+ | == year 2020 == |
||
+ | * 2020-01 [https://www.jstage.jst.go.jp/article/iscie/33/9/33_253/_pdf Concept and Design of Functional Programming for Interactive Art <tt>Polyphonic Jump!</tt>: Equation of Interaction] - Ichiroh Kanaya |
||
+ | *: "Moggi’s theory uses highly abstract mathematics and is generally difficult for average-level computer scientists to understand. However, Moggi’s concept is understandable without a deep understanding of Kleisli’s category theory." |
||
+ | |||
+ | * 2020-06 [https://terbium.io/2020/06/monads Monads!] |
||
+ | *: "All a type `M` must do to be monadic is to have a `flatMap` function and a `pure` function" |
||
+ | |||
+ | * 2020-07 [https://tutswiki.com/yet-another-lousy-monad-tutorial/ Yet another lousy monad tutorial] - Chankey Pathak |
||
+ | *: " I like concrete explanations that start with practical examples, without any annoying metaphors, and especially without any Haskell code." |
||
+ | |||
+ | * 2020-09 [https://www.bypaulshen.com/posts/monads-for-javascript-developers Monads for JavaScript developers] - Paul Shen |
||
+ | *: "...Maybe it's because of the monad tutorial fallacy. Anyways, I hope this gives you, a JavaScript developer, a gist of what monads are and why people care about them." |
||
+ | |||
+ | * 2020-10 [https://stopa.io/post/247 Inventing Monads] - Stepan Parunashvili |
||
+ | *: "...How could you end up inventing monads? Okay, let’s try to build that intuition. We’ll avoid both types and category theory." |
||
+ | |||
+ | == year 2021 == |
||
+ | * 2021-01 [https://www.codeproject.com/Articles/5290753/Simple-Introduction-to-Monads Simple Introduction to Monads] - Christian Neumanns |
||
+ | *: "A simple step-by-step introduction to monads for developers with a background in non-pure-functional programming languages like C#, Java, Python, etc." |
||
+ | |||
+ | * 2021-03 [https://web.engr.oregonstate.edu/~walkiner/teaching/cs583-sp21/files/6.Monads.pdf Monads] - Eric Walkingshaw |
||
+ | * 2021-03 [[Merely monadic]] - (''Haskell community'') |
||
+ | *: "In Haskell, monadic types - types having an instance for the Monad class - can be thought of as abstract descriptors of computations which are inherently composable [...]" |
||
+ | |||
+ | * 2021-04 [https://towardsdatascience.com/monads-from-the-lens-of-imperative-programmer-af1ab8c8790c Monads Explained] - Vidisha Jitani |
||
+ | *: "So, it took me a lot of struggling to understand what exactly ''“Monad”'' is!" |
||
+ | |||
+ | * 2021-04 [https://www.continuum.be/blog/a-gentle-introduction-to-monads/ A gentle introduction to Monads] - Kristof Slechten |
||
+ | *: "It is said that there’s a curse with Monads. I’m not making this up and it’s called the “monad tutorial fallacy” and the legend says that when you finally understand them, you lose the ability to explain it to others." |
||
+ | |||
+ | * 2021-12 [https://dev.to/kindsloth/monads-in-a-simple-way-7f9 Monads in a simple way] - Guilherme dos Reis Meira |
||
+ | *: "Monads were created by mathematicians in 1960 and rediscovered by computer scientists in 1990 as a new way to handle effects." |
||
+ | |||
+ | * 2021-12 [https://thatsnomoon.dev/posts/ts-monads How Monads Solve Problems] - <i>ThatsNoMoon</i> |
||
+ | *:"Imagine, for a moment, that it's 2013, you're involved in designing JavaScript, and you have a problem: callbacks are a mess." |
||
+ | |||
+ | == year 2022 == |
||
+ | * 2022-03 [https://elbear.com/how-to-use-monads-without-understanding-them.html How to Use Monads without Understanding Them] - Lucian Ursu |
||
+ | *: "[this article] covers do notation, the most common way of writing monadic code. I wanted to write it, because I believe you can write monadic code without understanding monads." |
||
+ | |||
+ | * 2022-03 [https://blog.ploeh.dk/2022/03/28/monads/ Monads] - Mark Seemann |
||
+ | *: "A monad is a functor you can flatten. That's the simplest way I can put it. " |
||
+ | |||
+ | * 2022-06 [https://people.engr.tamu.edu/hlee42/csce314/lec10-io.pdf CSCE 314 - Interactive Programs: I/O and Monads] - Hyunyoung Lee |
||
+ | * 2022-09 [https://doi.org/10.5281/zenodo.7048888 Thinking about thinking, or what Monads don't want] - Adam Fuks |
||
+ | * 2022-10 [[Continuation#Monads as stylised continuation-passing|Monads as stylised continuation-passing]] - (''Haskell community'') |
||
+ | |||
+ | == year 2023 == |
||
+ | * 2023-03 [https://flaviocorpa.com/haskell-for-elm-developers-giving-names-to-stuff-part-3-monads.html Haskell for Elm developers: giving names to stuff (Part 3 - Monads!)] - Flavio Corpa |
||
+ | ** other articles: |
||
+ | *** Haskell for Elm Programmers: giving names to stuff - [https://flaviocorpa.com/haskell-for-elm-developers-giving-names-to-stuff-part-1-functors.html parts 1], [https://flaviocorpa.com/haskell-for-elm-developers-giving-names-to-stuff-part-2-applicative-functors.html 2] and [https://flaviocorpa.com/haskell-for-elm-developers-giving-names-to-stuff-part-3-monads.html 3] |
||
+ | |||
+ | * 2023-06 [https://www.cs.toronto.edu/~trebla/CSCC24-2023-Summer/06-monad.html CSCC24 - Monad: effectful programming] - Albert Lai |
||
+ | *:"What is a number? You normally don't ask that, nor do you answer it directly. ... Likewise with vector spaces. Remember those? ... The same approach is best for monad. Don't seek a direct answer to “what is a monad?”." |
||
+ | |||
+ | * 2023-10 [https://arialdomartini.github.io/monads-for-the-rest-of-us Monads for the Rest of Us] - Arialdo Martini |
Latest revision as of 12:00, 29 July 2024
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.
“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.”
- Categories for the Working Mathematician, Saunders Mac Lane.
before 2000
- 1992-02 (published date) The essence of functional programming - Philip Wadler
- "This paper explores the use monads to structure functional programs. No prior knowledge of monads or category theory is required."
- 1992-08 Monads for Functional Programming (pdf) - Phil Wadler, a designer of Haskell [9100 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 (PDF: paper, conference proceedings)
- "We describe the design and use of monadic I/O in Haskell 1.3"
- 1999-02 What the hell are Monads? - Noel Winstanley [2800 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: ..."
year 2000
- 2000-01 Monads for the working Haskell Programmer - Theodore S. Norvell [4200 words, Haskell98, Gofer]
- "...monads can be used to implement several other programming features including: consuming input, producing output, exceptions and exception handling, nondeterminisim."
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 ..."
year 2003
- 2003-08 All About Monads - Jeff Newbern [22600 words] (Japanese translation: モナドのすべて)
- A comprehensive introduction. Covers monad transformers and some common monads. An appendix presents monads as assembly lines.
- "A monad is a way to structure computations in terms of values and sequences of computations using those values."
year 2004
- 2004-07 A Schemer's Introduction to Monads - Dave Herman [1700 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 (Russian translation) - Cale Gibbard [2900 words]
- "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 [2200 words, Perl]
- "Essentially a monad is a hidden data structure (Fig. 1) which automatically passes state around for us. "
year 2005
- 2005-07 Monads in Ruby - MenTaLguY
- Presents monads in a friendly language, starting from Identity
- "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."
- 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
- "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."
- 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
- Revised 2006-09 to include Meet Bob The Monadic Lover: "what monads look like and what they are useful for, from the perspective of a ... lover."
- 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.
- "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."
- 2009-06 Monads: Computations where order matters - Tim Sheard
- 2006-10 Ask Reddit: What the hell are monads?, an answer - tmoertel [700 words]
- "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."
- 2006-10 Monad Transformers Step by Step - Martin Grabmüller (also: updated version and associated Haskell code)
- 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 - Vlad Patryshev
- 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.
- 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) - Then I lie down in a dark room with a warm wet cloth over my eyes.
- Eric boils monads down to 15 minutes, using backtracking and Maybe as motivating examples. Eric uses
- 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-09 Monads are Elephants Part 1 - James Iry
- "Introductions to monads are bit of cottage industry on the Internet. So I figured, "why buck tradition?" But this article will present Scala's way of dealing with monads."
year 2008
- 2008-01 An explanation by 808140 [1588 words]
- "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."
- 2008-03 Real World Haskell, Chapter 14: Monads - Bryan O'Sullivan, Don Stewart, and John Goerzen
- "We aim to show you that a monad is often an obvious and useful tool to help solve a problem."
- 2008-06 Monads (in Russian, English translation) - Eugene Kirpichov [8200 words ru, 10000 en]
- "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)."
- 2008-09 What is a monad?, an answer - JacquesB (other answers at link)
- "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."
- 2008-12 From Monoids to Monads - Dan Piponi
year 2009
- 2009-01 Abstraction, intuition, and the “monad tutorial fallacy” - Brent Yorgey [meta]
- 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."
- 2009-03 A Monad Tutorial for Clojure Programmers
- "Monads are about composing computational steps into a bigger multi-step computation."
- 2009-03 How you should(n’t) use Monad - beelsebob
- "When we have functions that produce values that are hidden inside boxes, we have a problem. ... Monads add a single function called join, which is used to flatten out the layers of boxes: ..."
- 2009-06 The Greenhorn's Guide to becoming a Monad Cowboy - Hans van Thiel [9600 words]
- Covers basics, with simple examples, in a for dummies style. Includes monad transformers and monadic functions. "Actually, programming monads is much like cattle driving! So, let's get started."
- 2009-10 The State Monad: A Tutorial for the Confused? - Brandon Simmons
- This is written for someone who has a good understanding of the Maybe and List monads, but has gotten stuck trying to understand State... State monad is just an abstraction for a function that takes a state and returns an intermediate value and some new state value.
- 2009-11 What Does Monad Mean? - Tony Morris
- "The [monad] concept will be presented in a way with the objective of supplying enough understanding to apply the practical implications and will not address the underlying mathematics or category theory."
- 2009-11 What a Monad is not
- A desperate (futile?) attempt to end the eternal chain of monad tutorials.
year 2010
- 2010-02 Advances in Programming Languages: Monads and I/O - Ian Stark
- 2010-03 State Monad Tutorial - Byron Johnson
- "My goal is to teach others to help them understand the State monad. ... After this point, you should be able to easily understand the other monads."
- 2010-04 Programming with effects – the story so far - Patai Gergely
- Explains the relationships between the various abstractions over side effects, namely applicative functors, arrows, and monads.
- 2010-06 More about Monads and Other Notions of Effectful Computation - Henrik Nilsson
- 2010-07 I come from Java and want to know what monads are in Haskell - Tim Carstens [Java]
- 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."
- 2010-08 Learn You a Haskell, A Fistful of Monads
- "monads are just applicative functors that support >>=. The >>= function is pronounced as bind."
- 2010-08 Yet Another Monad Tutorial, part 1 (2, 3, 4, 5, 6, 7, 8) - Mike Vanier [7100 words p1, 45000 total]
- "Monads are a generalization of functions, function application, and function composition to allow them to deal with richer notions of computation than standard functions."
- 2010-10 A monad is just a monoid in the category of endofunctors, what's the problem?, an answer - pelotom (other answers at link)
- "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."
- 2010-11 Monads and Effects in Purely Functional Programming (slides) - Johan Glimming
year 2011
- 2011-01 Monads for the Curious Programmer: Part 1, Part 2, Part 3, and Monads in C++ - Bartosz Milewski [3400, 4300, 3400, and 5200 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: Safe Side-effects in Functional Programs - Patrick Macarthur
- 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 [3200 words, Javascript] (cf. 2006 "You Could Have Invented Monads")
- "Monads are really about composing functions"
- 2011-04 Understanding Haskell Monads - Ertugrul Söylemez [12400 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 [1800 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."
- 2012-08 Monads in Pictures - johnw
- "This is not a tutoral on monads, nor will I use any math terms here. This is for people who have learned enough about monads to use them, but want to get a better picture of what they’re doing and why they exist."
- 2012-11 Monads à la Mode - Cameron Swords and Daniel P. Friedman
- "The purpose of this article is to provide a concise introductionto monads for anyone who has an understanding of Scheme and simple types."
year 2013
- 2013-01 Monads in Haskell: An Introduction - Benjamin Kovach
- 2013-03 A Simple Monad Tutorial - Leah Hanson
- 2013-04 Functors, Applicatives, And Monads In Pictures.
- 2013-04 A newbie in Haskell land
- "I have identified three kinds of monads ... Monad as control of the sequencing ; Monad as control of side effects ; Monad as container"
- 2013-05 Kleisli Composition à la Up-Goer Five.
- 2013-06 Three Useful Monads
- 2013-07 Monads Made Difficult
- 2013-08 From Adjunctions to Monads
- 2013-08 Functors and monads for analyzing data
- 2013-08 Pure Functions, Laziness, I/O, and Monads
- 2013-08 Error Handling
- 2013-08 State monad
- 2013-10 Monads and Side Effects in Haskell - Alan Davidson
- 2013-10 A gentle intro to monads ... maybe? - Sean Voisen
- 2013-12 Monad transformers
- 2013-12 The tao of monad
- 2013-12 Monads in 15 minutes - Nikolay Grozev
- 2013-12 The First Monad Tutorial (slides) - Philip Wadler
year 2014
- 2014-01 Monads in Haskell: Algebra
- 2014-01 Yet Another Monad Tutorial in 15 Minutes
- 2014-01 Using Monads in Haskell
- 2014-01 Monads in Haskell: Lists &c
- 2014-01 PROGRAMMING WITH EFFECTS
- 2014-02 monads made difficult
- 2014-03 Error Handling
- 2014-03 Monads are hard because...
- 2014-04 How continuation monad works
- 2014-04 "Mostly functional" programming does not work: Informal Introduction to Monads
- 2014-05 Inside My World (Ode to Functor and Monad)
- 2014-06 Functor, Applicative, Monad
- 2014-07 First-Class "Statements" - Justin Le
- 2014-10 Refactoring Ruby with Monads
- 2014-12 Monads in Haskell - Nathanael Schilling
year 2015
- 2015-03 Monads
- 2015-04 Yet another "What is a Monad" post - Zohaib Rauf
- 2015-07 Dr Frankenfunctor and the Monadster
- "Or, how a 19th century scientist nearly invented the state monad."
- 2015-08 Monads Demystified - Josh Haberman
- 2015-09 What the Heck Is a Monad - Soroush Khanlou
- 2015-11 Briefly on the purpose of Functors, Applicatives and Monads
- 2015-11 A 5-Minute Monad Tutorial - Andrew Hirsch
year 2016
- 2016-04 Monads are confusing. Let us help - Kelley Robinson
- 2016-05 eatonphil/monad.ml - Phil Eaton
- "I finally grasped the use of monads while building linux images."
- 2016-09 A quick intro about Monads - franzejr
- 2016-09 CSC 131: Haskell Monads - Kim Bruce
- 2016-10 Monads (forget about bind) - Joakim Ahnfelt-Ronne
- 2016-10 Understanding Monads: From types to categories to analogy - Nick Hu
- 2016-10 CIS 194: IO and monads - Joachim Breitner
- 2016-11 Monads: Programmer’s Definition - Bartosz Milewski
- from the Category Theory for Programmers series.
- 2016-12 No, really, what's a monad? - Ryan Marcus
- "When seasoned Haskell developers try to explain monads to the rest of us, they’ll often find themselves resorting to ridiculously incomprehensible definitions."
year 2017
- 2017-03 Functors & Monads: An Introduction - Miguel Fonseca
- 2017-05 Well, What's a Monad? - Scott Nonnenberg
- 2017-06 Knowing monads through the category theory - Juan López López
- 2017-06 Informatics 1: IO and Monads - Don Sannella
- 2017-08 Monads.Std - Introduction (from the Binary Analysis Platform's included monads library) - Ivan Gotovchits
- 2017-11 Understanding Monads. A Guide for the Perplexed - Barry Burd
- "With the current explosion of functional programming, the 'monad' functional structure is once again striking fear into the hearts of newcomers."
- 2017-11 Learning Monads by Example - Diego Vicente
- "While writing my bachelor thesis, a heuristic search framework in Haskell, I ran into a roadblock I long feared to have: I needed to understand how monads work."
year 2018
- 2018-05 Monads explained by a imperative programmer - with examples - Dipun Mistry
- "A monad is any type construct that follows a specific pattern; it works in the same way as other design patterns."
- 2018-05 Different ways to understand a monad - Mateusz Kubuszok
- ... "hardly anyone is good at explaining what a monad is. That is why we’ll try to get some intuition about it without defining it."
- 2018-09 CS3110: Monads - Professor Clarkson
- "Attendance question: Have you programmed with monads in Haskell?"
- 2018-12 Of Groups and Monads
- An introduction by way of the simpler notion of a group, with some historical context
year 2019
- 2019-03 A monad is not a burrito - Maxime Kjaer
- "... monads are something that took a while to click in my head, too."
- 2019-04 "Monads made simple" - Carlos Morgado
- "Most talk/post/discussion about monads try to teach you Haskell first."
- 2019-04 Monads Tutorial - Monday Morning Haskell
- "[...] here's my crack at a definition: A Monad wraps a value or a computation with a particular context."
- 2019-08 Monads as a Programming Pattern - Sam Grayson
- "This article is written from a programmer’s perspective, where a monad is a software engineering pattern."
- 2019-09 Monads - Stephen Edwards
- 2019-12 An Overview of the Monad - Ragnhild Aalvik
- "In this article I will give a brief overview of what a monad is. [...] I will use metaphors to explain the concept, and I will not give any code examples in this article."
year 2020
- 2020-01 Concept and Design of Functional Programming for Interactive Art Polyphonic Jump!: Equation of Interaction - Ichiroh Kanaya
- "Moggi’s theory uses highly abstract mathematics and is generally difficult for average-level computer scientists to understand. However, Moggi’s concept is understandable without a deep understanding of Kleisli’s category theory."
- 2020-06 Monads!
- "All a type `M` must do to be monadic is to have a `flatMap` function and a `pure` function"
- 2020-07 Yet another lousy monad tutorial - Chankey Pathak
- " I like concrete explanations that start with practical examples, without any annoying metaphors, and especially without any Haskell code."
- 2020-09 Monads for JavaScript developers - Paul Shen
- "...Maybe it's because of the monad tutorial fallacy. Anyways, I hope this gives you, a JavaScript developer, a gist of what monads are and why people care about them."
- 2020-10 Inventing Monads - Stepan Parunashvili
- "...How could you end up inventing monads? Okay, let’s try to build that intuition. We’ll avoid both types and category theory."
year 2021
- 2021-01 Simple Introduction to Monads - Christian Neumanns
- "A simple step-by-step introduction to monads for developers with a background in non-pure-functional programming languages like C#, Java, Python, etc."
- 2021-03 Monads - Eric Walkingshaw
- 2021-03 Merely monadic - (Haskell community)
- "In Haskell, monadic types - types having an instance for the Monad class - can be thought of as abstract descriptors of computations which are inherently composable [...]"
- 2021-04 Monads Explained - Vidisha Jitani
- "So, it took me a lot of struggling to understand what exactly “Monad” is!"
- 2021-04 A gentle introduction to Monads - Kristof Slechten
- "It is said that there’s a curse with Monads. I’m not making this up and it’s called the “monad tutorial fallacy” and the legend says that when you finally understand them, you lose the ability to explain it to others."
- 2021-12 Monads in a simple way - Guilherme dos Reis Meira
- "Monads were created by mathematicians in 1960 and rediscovered by computer scientists in 1990 as a new way to handle effects."
- 2021-12 How Monads Solve Problems - ThatsNoMoon
- "Imagine, for a moment, that it's 2013, you're involved in designing JavaScript, and you have a problem: callbacks are a mess."
year 2022
- 2022-03 How to Use Monads without Understanding Them - Lucian Ursu
- "[this article] covers do notation, the most common way of writing monadic code. I wanted to write it, because I believe you can write monadic code without understanding monads."
- 2022-03 Monads - Mark Seemann
- "A monad is a functor you can flatten. That's the simplest way I can put it. "
- 2022-06 CSCE 314 - Interactive Programs: I/O and Monads - Hyunyoung Lee
- 2022-09 Thinking about thinking, or what Monads don't want - Adam Fuks
- 2022-10 Monads as stylised continuation-passing - (Haskell community)
year 2023
- 2023-03 Haskell for Elm developers: giving names to stuff (Part 3 - Monads!) - Flavio Corpa
- 2023-06 CSCC24 - Monad: effectful programming - Albert Lai
- "What is a number? You normally don't ask that, nor do you answer it directly. ... Likewise with vector spaces. Remember those? ... The same approach is best for monad. Don't seek a direct answer to “what is a monad?”."
- 2023-10 Monads for the Rest of Us - Arialdo Martini