Haskell per se doesn&#x27;t really <i>have</i> monads, except in the sense that there&#x27;s an opaque `IO` type which is only useful for &quot;doing IO&quot; because it is an instance of `Monad` (and `Functor`), and in the sense that there&#x27;s some very thin syntactic sugar for composing monadic types. So haskell-the-language has type classes (like `Monad` or `Functor` or `Show`), and more importantly strong static typing. The latter means you can create abstractions (like Monad) that are not brittle.<p>You can check out this module:<p><a href="http:&#x2F;&#x2F;hackage.haskell.org&#x2F;package&#x2F;base-4.8.1.0&#x2F;docs&#x2F;Control-Monad.html" rel="nofollow">http:&#x2F;&#x2F;hackage.haskell.org&#x2F;package&#x2F;base-4.8.1.0&#x2F;docs&#x2F;Control...</a><p>You can see all the varied sorts of things which are &quot;instances of Monad&quot;, then scroll beyond and see all these different useful operations which behave sensibly for all those different instances (and from which you can build your own more complex operations which work for any Monad, and which also behave sensibly).