【发布时间】:2016-08-23 22:56:10
【问题描述】:
根据 Harper (https://existentialtype.wordpress.com/2011/04/16/modules-matter-most/) 的说法,类型类似乎根本无法提供与模块相同的抽象级别,我很难弄清楚原因。该链接中没有示例,因此我很难看到关键差异。还有其他关于如何在 Modules 和 Type Classes 之间进行转换的论文 (http://www.cse.unsw.edu.au/~chak/papers/modules-classes.pdf),但是从程序员的角度来看,这与实现没有任何关系(它只是说没有什么可以做的)其他人无法模仿)。
具体来说,在first link:
第一个是他们坚持一个类型可以以一种方式实现一个类型类。例如,根据类型类的哲学,整数可以精确地以一种方式排序(通常的排序),但显然有许多排序(例如,通过可分性)感兴趣。第二个是他们混淆了两个独立的问题:指定类型如何实现类型类以及指定在类型推断期间何时应使用此类规范。
我也不明白。一个类型可以在 ML 中以多种方式实现一个类型类?在不创建新类型的情况下,您将如何通过示例对整数进行可除性排序?在 Haskell 中,您必须执行诸如使用数据之类的操作并使用 instance Ord 来提供替代排序。
第二个,这两者在 Haskell 中不是不同的吗? 指定“在类型推断期间何时应使用此类规范”可以通过以下方式完成:
blah :: BlahType b => ...
其中 BlahType 是在类型推断期间使用的类,而不是实现类。而“类型如何实现类型类”是使用 instance 完成的。
有人能解释一下这个链接到底想表达什么吗?我只是不太明白为什么模块会比类型类限制更少。
【问题讨论】:
-
这里的两个链接都是受限访问。老实说,这很奇怪。