2013/01/13 23:08:00
Да я блин годами блин пытался усвоить это простое понятие, думая, хм, как же определить, является ли класс тайп-классом или нет.

Тьфу. Слово "класс" здесь не в смысле ООП, не в джавном смысле; type class - это просто коллекция типов... обычно параметризованная (типами же, но в принципе не обязательно). В английской википедии написана на эту тему полнейшая чушь. Надо бы поправить.

Итак, если есть тип, хорошо. Если же можно объединить типы по какому-то признаку, то это будет класс типов, type class. В джаве это делается с помощью параметризации.

List<T>

Здесь имеется в виду класс списков. Дальше я расскажу, каков смысл джавного типа List, без дженерика.

Класс типов в том смысле, что List<Integer> и List<String> - это два разных типа, но принадлежат они одному классу типов. Параметризованы они типом элементов; первый пример - тип элементов Integer, второй - String.

Собственно, это и всё, больше городить нечего, но остался ещё тип List, про который в джаве принято думать, что это от общей умственной отсталости.

Не совсем так. Джавный класс List - это экзистенциальный тип, в скале записываемый как List[T] forSome {T} - список элементов определённого типа, для некоторого типа (которого мы не знаем), и это не то, что List<Object> (легко проверяется, если попробуете поприсваивать одно другому).

Это всё, что я хотел сказать; ничего нового.
0 посетителей, 33 комментария, 0 ссылок, за 24 часа