# Monads and Friends

## My take on monads and friends

```
Vanilla: (a → b) × a → b
┌─┐ ┌─┐
Functor: (a → b) × │a│ → │b│
└─┘ └─┘
┌─┐ ┌─┐ ┌─┐
Monad: (a → │b│) × │a│ → │b│
└─┘ └─┘ └─┘
┌───────┐ ┌─┐ ┌─┐
Applicative: │(a → b)│ × │a│ → │b│
└───────┘ └─┘ └─┘
```

There are plenty of monad tutorials out there, but this is how they make sense to me and maybe it will help you too. There are some minor variations I have made which highlights their similarities and differences.

### Notation and Differences

`a`

and `b`

are type variables and could be replaced by anything like `int`

, `string`

, `float`

or whatever your language gives you. The box around `a`

/`b`

(which you might see as `f a`

/`f b`

in another context, but is not as sightly) are things like lists, objects, or anything that can contain a value of type `a`

/`b`

. `→`

is a function and `×`

gives the list of arguments (again, you will probably see `→`

being used for this purpose, but we don’t care about currying right now). You might also notice I have some arguments ordered differently.

## The idea

The four things I’ve given above — vanilla (my made up word on plain function application), functor, monad, & applicative — have a function (`F`

for shorthand) of 2 arguments, one of which is a function, the other is some value. `F`

takes the function and applies it to the value. The exact details of *how* it does this application is not completely specified by the types alone, but gives us a rough idea on what is going on. We’re also missing some way of creating a boxed `a`

from an `a`

, but these are not as interesting.

The whole idea is that we have 4 different patterns of applying a function to a value. These patterns save us from writing the same pieces of code in every function we want to operate on a new box.

## Takeaway

Even if your language doesn’t let/require you to write down types, these concepts are still there and still worthwhile to become familiar with. I have left out a lot of details and you should go fill those in from somewhere else. But for me, those 4 type signatures capture everything I find important and it looks nice!