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