2012-04-13 62 views

回答

16

需要一个类型类型就像将一个额外的参数传递给包含类型成员的函数作为数据结构一样,因为在GHC中解析后的场景就是这样。这就是说,GHC非常擅长内联和专门化使用类型类的代码,以至于它不是一个问题,而-O2很大一部分消失了,但即使没有那种优化级别传递论据相当便宜。

所以开销比幻影类型或新类型多,但它不是很高。

另外,其他编译器的开销可能会有所不同。例如JHC有效地使用有限形式的依赖类型对类型构造函数进行案例分析,因此您支付约束类型变量的数量,而不是在JHC中工作时的约束数量。

+16

传递一个额外的参数很便宜。在通过的记录中调用未知函数非常昂贵。因此,类型类非常昂贵,除非编译器设法将它们专门化。 – augustss 2012-04-13 22:35:22

+1

我总是欣赏Augustss的答案风格。提供过分合格的答案,并且如此简洁以至于许多提问者不了解他们的全部价值(自2011年起)。我有时觉得我们应该制作一个bot,总是对他的回答/评论发表评论,说:“哇,这很好知道!”。 – 2012-04-14 21:42:29

+2

真的,我想我应该补充一点,从传递的字典中调用一个函数需要至少一个,通常是2个间接跳转,这意味着管道延迟等。 – 2012-04-15 04:33:06

相关问题