В мире Java соглашения об именах для интерфейсов довольно хорошо установлены. Например, когда вы говорите, что определенный класс реализует интерфейс Comparable, вы можете сказать, что его объекты сопоставимы. Однако соглашения об именах для типов классов не так хорошо установлены. Например, Int имеет Numeric неявный доступ, поэтому вы можете сказать: "Int - это тип Numeric". Но тогда есть typeclass Ordering. Я не понимаю, почему это имя было выбрано. "Int - это тип Ordering" не имеет никакого смысла. Возможно, он должен быть прочитан как "Int имеет тип Ordering". Тогда в Scalaz есть Equal и Show. Я совершенно не понимаю, почему эти имена были выбраны (кроме того, что они так в Haskell.) Я попытался взглянуть на Haskell, материнский язык typeclasses, для хорошего соглашения об именах, но обнаружил, что их действительно не существует. Ребятам из Haskell действительно не нравятся имена (это то, что я собрал в дискуссиях по рассылке). Но, исходя из Java-мира, меня волнуют имена. Я не совсем в состоянии привыкнуть к парадигме "типы говорят все".
Вопрос: какие соглашения об именах вы используете, если это вообще возможно, для присвоения имен классам?