当我在学习 Haskell 的时候,我注意到了它的 类型类,它被认为是一个伟大的发明,起源于哈斯克尔。
然而,在 类型类的维基百科页面:
程序员通过指定一组函数或 必须存在的常量名及其各自的类型 对于属于该类的每个类型。
在我看来,这似乎与 Java 的接口相当接近(引用 维基百科界面(Java)页面) :
Java 编程语言中的接口是一种抽象类型 用于指定接口(在术语的通用意义上) 类必须实现的。
这两者看起来非常相似: type 类限制类的行为,而 interface 限制类的行为。
我想知道哈斯克尔的类型类和 Java 的接口之间有什么不同和相似之处,或者它们有什么本质上的不同?
编辑: 我注意到 就连 haskell.org 也承认它们很相似。如果它们如此相似(或者它们真的如此相似?),那么为什么类型类被如此大肆宣传?
更多编辑: 哇,这么多很棒的答案!我想我得让社区来决定哪个是最好的。然而,在阅读答案时,他们似乎都只是说 类型可以做很多事情,而接口不能或者必须处理泛型。我不禁想知道,有没有什么 接口能做什么而类型类不能做什么?。同时,我注意到,维基百科声称类型类最初是在1989年的论文 * “如何让 ad-hoc 多态性不那么 ad hoc”中发明的,当时 Haskell 还处于摇篮阶段,而 Java 项目始于1991年,并于1995年首次发布。那么,也许不是类型类类似于接口,而是相反,接口受到类型类的影响?是否有任何文件/论文支持或反驳这一点?感谢所有的答案,他们都是非常有启发性的!
感谢所有的投入!