Monads themselves don&#x27;t compose nicely. There&#x27;s no guarantee that the composition of two monads is itself a monad, for example. That&#x27;s why Haskell has monad transformers. But monad transformers are quite hard to reason about (they&#x27;re not even commutative).<p>It&#x27;s true that in a certain sense monads are &quot;about composition&quot;, but that doesn&#x27;t mean they aren&#x27;t without issues, and I certainly think it&#x27;s appropriate to call monads non-declarative. In fact, I think &quot;being in a monad&quot; is more or less the essence of what it is to be imperative - which is why they&#x27;re useful! Quite often we <i>want</i> to be imperative.<p>The word &quot;compositional&quot; is quite vague. I wish people would stop tossing it around so lightly without explaining what they meant by it.