The categorical origin of monads in Haskell
Summary
Category theory is an abstract part of mathematics. It is based on categories, which consist of just objects and morphisms between these functions. When talking about categories you will most likely also be talking about functors, which are the morphisms between the categories. These functors can be combined to create a relation between two categories called adjunctions. Using all these concepts we can create some extra structure on categories called monads. These monads can then be used to create algebra that can suddenly introduce very known concepts like groups. We can also use the monads to create other interesting categories, namely the Kleisli categories.
The type system of the functional programming language Haskell can actually be seen as a category. Because of this most of our categorical concepts also have their place in Haskell. Some concepts like functors and monads are very commonly used, other concepts like adjunctions and algebras are defined but not that commonly used.