Laziness is not always good

From HaskellWiki

Generally, since Haskell is a non-strict language,
you should try to make a function least strict.
This is in many cases the best semantics and the most efficient implementation.
However, here is an important exception from the rule:

Consider the

Monoid

instance of the null type

()

:

mempty =()
mappend __=()

These functions are least strict, but have a subtle problem:
They do not generally satisfy the monoid laws.