Monads are one of the hottest topics in functional programming, and arguably simplify the construction of a whole class of systems. Which makes it surprising that they’re so opaque and hard to understand to people who’s main experience is in imperative or object-oriented languages.