And it's not just monads

We can do this because we have higher-order polymorphism. We can also generalise applicative functors, comonads, arrows, covariant and contravariant functors, binary covariant functors, structure traversal and many other concepts that are well documented in the literature.

Monads get far more attention than they deserve!