If monads are the solution, what is the problem?
If you&#x27;re looking to understand what Monads are or <i>why</i> they&#x27;re interesting this isn&#x27;t the place to figure that out.<p>Monad: if you have a data structure that wraps some value of any type, then you also have to implement the interface that provides `return` and `bind` (there&#x27;s talk about requiring another method, `join` but I digress). The data structure is the &quot;context&quot; and the interface is how you compose values from other Monads together using functions. If you can prove your implementation of the interface methods follow certain rules then you have a Monad.<p>Why is this pattern&#x2F;abstraction&#x2F;interface useful in Haskell?<p>I think there are several reasons. The article touches one of the most talked about: sequencing. Because of the way the rules of the Monad interface are structured you&#x27;re guaranteed that the functions you use to compose your Monads together will be executed in sequence with respect to their definition in your function body.<p>(How it all ties together is straight-forward but requires a certain pedagogy and exposition to follow that I won&#x27;t get into.)<p>This is, consequently, what makes Haskell the best imperative language in the world. Not only do you get to use it&#x27;s wonderful type system but you can compose together small imperative programs into bigger, more useful ones.