在我学习Haskell的过程中,我注意到它的类型类,它应该是一个源自Haskell的伟大发明.
但是,在类型类的维基百科页面中:
程序员通过指定一组函数或常量名称以及它们各自的类型来定义类型类,这些类型必须存在于属于该类的每个类型.
这似乎与Java的界面非常接近(引用维基百科的界面(Java)页面):
Java编程语言中的接口是一种抽象类型,用于指定类必须实现的接口(在术语的一般意义上).
这两个看起来很相似:类型类限制了类型的行为,而接口限制了类的行为.
我想知道Haskell中的类类和Java中的接口之间有什么区别和相似之处,或者它们可能根本不同?
编辑:我注意到即使haskell.org也承认它们是相似的.如果它们如此相似(或者它们是什么?),那么为什么类型类会受到这样的炒作?
更多编辑:哇,这么多很棒的答案!我想我必须让社区决定哪个是最好的.然而,在阅读答案时,所有人似乎都只是说"在界面无法或不得不应对泛型时,类节目可以做很多事情".我不禁想知道,有什么接口可以做而类型不能吗?此外,我注意到维基百科声称类型类最初是在1989年的论文中发明的*"如何使ad-hoc多态性不那么特别",而Haskell仍处于摇篮之中,而Java项目始于1991年并于1995年首次发布那么也许代码类似于接口,而另一种方式,接口受类型类的影响?是否有任何文件/文件支持或反驳?感谢所有答案,他们都非常有启发性!
感谢所有的投入!
当我开始学习Haskell时,我被告知类型类与接口不同且功能更强大.
一年后,我广泛使用了接口和类型,我还没有看到它们如何不同的示例或解释.这不是一种自然而然的启示,或者我错过了一些明显的东西,或者实际上没有真正的区别.
搜索互联网并没有发现任何实质性内容.那么,你有答案吗?