We started learning about functors, which are a collection of values that can be mapped over. We then introduced the idea of applicative functors, which allow us to put those values in a certain context and apply functions to them while preserving the context. We also made a quick detour to talk about monoids and their properties.
With all this prior knowledge, we are finally ready to start with the idea of monads. As James Iry humorously noted in A Brief, Incomplete, and Mostly Wrong History of Programming Languages:
A monad is a monoid in the category of endofunctors, what's the problem?
This fictional quote, attributed to Philip Wadler, one of the original people involved in the Haskell specification and a proponent of the use of monads, ...