52
$\begingroup$

I have been learning some functional programming recently and I so I have come across monads. I understand what they are in programming terms, but I would like to understand what they are mathematically. Can anyone explain what a monad is using as little category theory as possible?

$\endgroup$
9
  • 2
    $\begingroup$ I have been having the same question for ages. $\endgroup$ Commented Jul 21, 2010 at 23:33
  • 1
    $\begingroup$ I added the intuition tag to reflect the "simple explanation" part. $\endgroup$
    – BBischof
    Commented Jul 21, 2010 at 23:50
  • 4
    $\begingroup$ @Casebash: If you have no intention of accepting our answers, please stop asking these types of questions. $\endgroup$
    – user126
    Commented Jul 22, 2010 at 18:23
  • 3
    $\begingroup$ @Jonathan Actually, haskell.org/tutorial/monads.html they are the same. I don't completely understand that link, but what I extract makes me think they are the same. And they come right out and say it. Also, our last names are similar. $\endgroup$
    – BBischof
    Commented Jul 22, 2010 at 22:50
  • 1
    $\begingroup$ @BBischof good to know! I also found this link which looks promising. en.wikibooks.org/wiki/Haskell/Category_theory. Yes your name makes me think I misspelled my name :). $\endgroup$ Commented Jul 22, 2010 at 23:28

3 Answers 3

19
$\begingroup$

If you want to avoid too much category theory, you can first read this link to understand the definition of monads in Haskell. Then look at Wikibooks for a more mathematical look (thanks Jonathan Fischoff).

There are two descriptions that I know of. The first can easily be found by looking at wiki under Monad or consulting Harry's nice summary. The second is more interesting in my opinion.

I will assume that you don't know the definition of a monoidal action, if you do, just skip ahead.

A monoidal action is a functor from a monoid to the category of endofunctors on a category satisfying two coherence relations. These two coherence relations simply verify that your monoidal product is the same as composition in the target, and that the identity object behaves with the action. The relations are normally written as diagrams, but without latex implement, I wont type them here.

To get an idea of a monoidal action, consider a group action, and formulate it a little more categorically, by writing the two axioms as diagrams. These diagrams, when converted to the language of monoidal categories, are exactly those of a monoidal action.

Now the best part is once you have monoidal action, monads on a category are simply the category of monoidal actions from the trivial monoidal category to your category. Note here that the trivial monoidal category will be the monoidal category with one object one morphism and all the other monoidal data is trivially determined. The monadic coherence relations come for free from your monoidal action coherence relations.

So, my simple explanation?

In this way, we can formulate monads functorially as "representations" of the trivial monoidal category.

One can readily show the two definitions are the same.

$\endgroup$
9
  • 2
    $\begingroup$ The link was actually the most useful answer posted, so I edited it into your answer and accepted it $\endgroup$
    – Casebash
    Commented Aug 18, 2010 at 6:35
  • $\begingroup$ @casebash Lol! Best use of editing power EVER! $\endgroup$
    – BBischof
    Commented Aug 18, 2010 at 14:16
  • 1
    $\begingroup$ I find this and other similar descriptions of monads like the one by 97823123 rather un-enlightening. While knowing that monads are monoids in the (strict) monoidal endofunctor category (or functors in some specially concocted category) is an interesting and useful result, it fails to explain what monads are in any deeper sense or what they are good for. But the OP has already accepted this answer and any answer I could possibly give would need some heavy category theory, so I'll just register my disapointment and shut up. $\endgroup$ Commented Aug 18, 2010 at 21:52
  • $\begingroup$ @G. Rodrigues Two things. First, I was going for simple as the OP asked. And second, isn't this formulation deep to you? I find it very deep and satisfying. As the representations of a monoidal category, I feel like monads are much more interesting than the normal definition. Please DON'T shut up. If not for the sake of the OP, then for my sake, please tell me your deeper formulation! I am very interested! I also probably have the necessary background. If you think this forum is inappropriate email me: bryan (dot) bischof (at) gmail (dot) com. I would love to discuss this with you! :D $\endgroup$
    – BBischof
    Commented Aug 18, 2010 at 23:44
  • $\begingroup$ @G. Rodrigues, BBischof: As I said in my comment, the link was the best response I recieved to this answer. It gives a mathematical explanation of monads, while avoiding much of the complexities of category theory $\endgroup$
    – Casebash
    Commented Aug 19, 2010 at 0:16
18
$\begingroup$

Monads in Haskell and monads in category theory are very much the same: A monad consists of a functor $T: C \to C$ and two natural transformations $\eta_X : X \to T(X)$ (return in Haskell) and $\mu_X : T(T(X)) \to T(X)$ (join in Haskell) subject to the following laws

$\mu_X \circ T(\eta_X) = \mu_X \circ \eta_{T(X)} = 1_{T(X)}$ (left and right unit laws)

$\mu_X \circ \mu_{T(X)} = \mu_X \circ T(\mu_X)$ (associativity)

So, compared to Haskell, the monad is defined in terms of return, join and fmap instead of return and (>>=). For more details on this, see also the Haskell wikibook.

Two examples may illuminate this definition.

The powerset functor

  • $\mathcal{P} = X \mapsto \mathcal{P}(X)$ maps a set to the set of its subsets.
  • Functions $f:X \to Y$ are extended point-wise to $\mathcal{P}(f):\mathcal{P}(X) \to \mathcal{P}(Y)$
  • $\eta_X : X \to \mathcal{P}(X)$ is the function $x \mapsto \left\{x\right\}$
  • $\mu_X : \mathcal{P}(\mathcal{P}(X)) \to \mathcal{P}(X)$ flattens the inner layer of subsets: $\mu_X(A) = \left\{ b | a \in A, b \in a \right\}$.
  • This is similar to the list monad in Haskell.

The closure operation on the subsets of a topological space $S$ is a monad, too.

  • The objects of the category $C$ are the subsets of a given topological space $S$.
  • There is an unique arrow $X \to Y$ between to objects $X$ and $Y$ exactly when $X \subseteq Y$.
  • The monad is given by the functor that maps each object $X$ to its topological closure $\bar X$ and the arrow $X \subseteq Y$ to the arrow $\bar{X}\subseteq \bar{Y}$.
  • Clearly, we have $X \subseteq \bar X$; this is $\eta_X$.
  • Also, we know that $\bar{\bar X} = \bar X$, in particular $\bar{\bar X} \subseteq \bar X$; this is $\mu_X$.
$\endgroup$
7
  • $\begingroup$ They are very much the same because a monad in Haskell is just an example of a category-theoretical monad in the category $\bf Hask$ (well, internal to Hask that is.) Its pretty much the same as $\bf Set$ though. $\endgroup$ Commented May 31, 2015 at 1:00
  • $\begingroup$ It looks convincing, and I upvoted it, but I still don't see it. Let's consider your second example. The endofunctor $T:C\to C$ is given by $X\to \bar{X}$ and $(X\subseteq Y)\to (\bar{X}\subseteq \bar{Y})$. This gives the only object of the monad (monoid), namely $T$. However, what are the morphisms in this Monad? It seems to me it cannot be neither $\mu$ nor $\eta$, as, e.g., for $\eta$ being a "morphism" in this monad, its "type" should be $\eta : T\to T$, such that $\eta_X : T(X)\to T(X)$ which is $\eta_X : \bar{X}\to\bar{X}$. $\endgroup$
    – MASL
    Commented May 19, 2016 at 19:11
  • $\begingroup$ I mean, your examples are sound, and they clearly satisfy the definition of a monad as stated, say, in Riehl's book. What I have troubles with is in seeing how this is equivalent to the definition of it as "a monoid in the cat of endofunctors on $C$". I can indentify the only object of this monoid, namely, $T$(:$\bf{Set} \to {\bf Set}$ / ${\cal P}(S)\to {\cal P}(S)$) with the mapping of objects and arrorws in $C$ as you stated. What I fail to see is what the natural transformations are that act as morphisms of the corresponding monoid, and how they relate to $\eta$ and $\mu$. $\endgroup$
    – MASL
    Commented May 19, 2016 at 20:32
  • $\begingroup$ @MASL It appears to me that "How can a monad be interpreted as a monoid in the category of endofunctors" is a different question than the one addressed with this answer? $\endgroup$ Commented May 20, 2016 at 9:53
  • 2
    $\begingroup$ @Hi-Angel : Actually no, $\eta$ is not the functor. The functor is a mapping that assigns to each object another object and to each morphism another morphism, while $\eta$ is a morphism between two objects. The functor does not know what to do with "elements" of objects, only morphisms can do that. $\endgroup$ Commented Feb 12, 2017 at 15:42
5
$\begingroup$

Let $C$ be a category. Then a monad based at $C$ is a monoid in the strict monoidal category

$$\mathcal{End}(C)=\mathcal{Hom}_{Cat}(C,C),$$

where the natural monoidal product is given by composition of endofunctors, and the monoidal unit is the identity functor.

A monoid in a monoidal category is defined here.

If you need more explanation, just give me a call.

Notation: The category of functors $C\to D$ is also written as $Fun(C,D)$, but this notation is nonstandard. The standard notations are $\mathcal{Hom}_{Cat}(C,D)$ or simply $Cat(C,D)$.

$\endgroup$

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .