Пока я изучаю Haskell, я заметил его класс типа, который должен стать отличным изобретением, которое возникло из Haskell.
Однако в странице Википедии в классе классов:
Программист определяет класс типа, задавая набор функций или постоянные имена вместе с их соответствующими типами, которые должны существовать для каждого типа, принадлежащего классу.
Что мне кажется ближе к интерфейсу Java для меня (цитирование страницы интерфейса Википедии (Java)):
Интерфейс на языке программирования Java является абстрактным типом, который используется для указания интерфейса (в общем смысле этого слова) что классы должны реализовывать.
Эти два варианта выглядят довольно похоже: тип класса ограничивает поведение типа, а интерфейс ограничивает поведение класса.
Интересно, каковы различия и сходства между классом классов в Haskell и интерфейсом на Java, или, может быть, они принципиально отличаются?
EDIT: Я заметил даже haskell.org признает, что они похожи. Если они настолько похожи (или они?), То зачем типу класса обрабатывается такая реклама?
БОЛЬШЕ РЕДАКТИРОВАНИЯ: Ничего себе, так много замечательных ответов! Думаю, мне придется разрешить общине решить, какой из них лучше. Однако, читая ответы, все они, кажется, просто говорят, что "существует много вещей, которые может выполнять класс, поскольку интерфейс не может или должен справляться с дженериками". Я не могу не задаться вопросом, есть ли что-нибудь, что может работать с интерфейсами, если нет.. Кроме того, я заметил, что Wikipedia утверждает, что typeclass был первоначально изобретен в статье 1989 года * "Как сделать ad-hoc polymorphism less ad hoc", в то время как Haskell все еще находится в своей колыбели, в то время как Java-проект был запущен в 1991 году и впервые выпущен в 1995 году. Таким образом, может быть, вместо того, чтобы typeclass был похож на интерфейсы, наоборот, на эти интерфейсы влияло typeclass? Есть ли документы или документы для поддержки или опровержения этого? Спасибо за все ответы, они все очень поучительны!
Спасибо за все входы!