# “A monad is a monoid in the category of endofunctors”

## What “functor” means

When we talk about functors, we often say something like:

a functor F is something that can lift a function

`A → B`

into`F<A> → F<B>`

This phrasing implies that `fmap`

itself is the functor. This sets us up for failure when we then try to describe why “a monad is an functor monoid,” because it makes it sound like a monad is a monoid on `fmap`

functions. But it’s actually a monoid on the half of the definition of functor that we omitted.

A functor consists of *two things*. A functor is the pair of:

- A type constructor (
`F`

), and - An
`fmap`

function

## The monoid is over type constructors

A monad involves a monoid on functor *type constructors*, not on functor `fmap`

s. The monoid means you can combine `F<·>`

with `F<·>`

, and the result `F<F<·>>`

is isomorphic to `F<·>`

.

In Haskell, this combining operation corresponds to the function called `join`

.