blaze-html is an example of something implementing the Monad typeclass just to get desugaring. Somebody wrote Lucid for exactly the reason you describe(you can&#x27;t use things like forM_ with blaze because it blows up).<p>In any case, you might argue it isn&#x27;t a mathematical monad, but it can still be a Haskell monad as long as it implements the typeclass.<p>I agree it makes the most sense if it implements the laws: Otherwise, it&#x27;s like calling something a Stack&lt;String&gt; when it really deletes your home directory whenever you peek an element. Technically anything that implements the Stack&lt;&gt; interface is a Stack in the language, but it&#x27;s not an abstract Stack.