You completely misunderstood my point, which is that they are clearly defined in Haskell because it does not have to contend with a type system with inheritance and an object oriented design.
For example, if you “newtype” String, what is the type of its toString() method? Can you answer that without any reference to the type hierarchy?
You are basically saying it can be easily done without actually going to the trouble of explaining how it should be done. Give the exact rules and I’ll give examples that break them.
Why is it better handled by the language? It’s funny that you mention below that “the above response should also answer this question” but you actually didn’t answer anything. You say it is better handled by the language without any arguments to support it. I gave arguments to support the position that it is not handled better by the language.
You believe it needs to be implemented in the language itself because the classes from external libraries are full of special cases? That makes no sense whatsoever.