Apart from equality, comparison, and hashing, are there any *other* operations where it's important to have some language mechanism to avoid mixing up data structures built with different implementations of the operation?
(Mechanisms such as type class canonicity a.k.a. trait coherence, type-level tags, generative functors, ...)
Basically, I'm wondering how much of the low-hanging fruit would be picked by special-casing just these operations specifically.