Thanks for the follow up. These “cases you need to know what those are to understand” is what I think is missing. It makes a lot of sense for these categories to work as “contracts”, in the sense that “this module works only with things that have these properties”. What I have no idea is which modules these might be.
The best I can think of is implementing a Comparer for a Sort function in C++/C#/Python. If you don’t pass a comparison function that is transitive it won’t sort right. There is no language construct to enforce that in those languages, so you just kinda have to know if you are doing something custom.