nprofile1qy2hwumn8ghj7un9d3shjtnddaehgu3wwp6kyqpqjd874v63430gng67kpw5m597f34dr9vr0yhkp8dkmnma8208raysyd6kk0 (nprofile…6kk0) OK, this was roughly my understanding so I'm glad I wasn't missing something.
By the way, this all reminds me of nprofile1qy2hwumn8ghj7un9d3shjtnddaehgu3wwp6kyqpqtc5szsf8gs54cuursvgzkp8t04thtvr7ytgxcr88w6kxnkn83tls4euzsf (nprofile…uzsf)'s Coda project, which sadly got more or less abandoned. https://github.com/ekmett/coda/. The way he explained it to me was roughly that typeclasses should be a poset along with a (not necessarily injective) functor to the category of module signatures and functors between them. Adding new ways of deriving typeclasses from other type classes involves also proving as a side condition that any introduced diamonds are trivial.