Nothing wrong with type safety: your programs will not be broken anyway.
But a data structure based on your Monoid instance may produce unexpected or incorrect results.
Consider a tree that is rebalanced when inserted, and provides a way to combine its elements using a Monoid instance. Then re-balancing, which should be an internal operation and not visible to you, becomes observable, and referential transparency "morally broken" - the same input (up to the supposedly hidden internal elements), but a different conclusion.
source share