To be fair, most of these classes come with "laws" instances are supposed to follow, which are not encoded in the language...
Good point!
On the other hand, the burden of proof is on the library writer who creates the typeclass instance, not on the end user - possible largely thanks to purity - whereas programmers may expect to re-implement various patterns by hand.
That was partly my point, at least for functional languages that can express these concepts, like certain statically typed ones.