根据Harper的说法(https://existentialtype.wordpress.com/2011/04/16/modules-matter-most/),似乎类型类并没有提供与模块同等级别的抽象,但我很难确切地弄清楚为什么。该链接中也没有示例,因此很难看出关键区别。还有其他论文介绍如何在模块和类型类之间进行转换(http://www.cse.unsw.edu.au/~chak/papers/modules-classes.pdf),但这与程序员的实现无关(只是说其中一个不能模拟另一个)。具体来说,在first link中:
他们的第一个观点是类型只能以唯一的方式实现类别。例如,根据类型类的理念,整数可以按照精确的方法排序(通常排序),但显然有许多感兴趣的排序方法(例如,按可除性)。第二个观点是将两个分开的问题混淆在一起:指定类型如何实现类型类别和指定类型推断期间应使用此类别的说明时机。
他们的第一个观点是类型只能以唯一的方式实现类别。例如,根据类型类的理念,整数可以按照精确的方法排序(通常排序),但显然有许多感兴趣的排序方法(例如,按可除性)。第二个观点是将两个分开的问题混淆在一起:指定类型如何实现类型类别和指定类型推断期间应使用此类别的说明时机。
blah :: BlahType b => ...
BlahType是类型推断过程中使用的类,而不是实现类。而“一个类型如何实现类型类”是通过instance
实现的。
有人能解释一下这个链接到底想表达什么吗?我还不太明白为什么模块会比类型类更灵活。