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