21

标题几乎总结了我的问题:是否存在与 Haskell 的类型类相关的运行时惩罚,或者它只是其中之一(如幻像类型)而没有任何运行时后果?

4

1 回答 1

17

需要一个类型类就像将一个额外的参数传递给包含类型类成员作为数据结构的函数,因为在幕后,这就是它在 GHC 中脱糖的内容。

也就是说,GHC 非常擅长内联和专门化使用类型类的代码到不成问题的程度,使用 -O2 很大一部分它们会消失,但即使没有那种优化级别,传递参数也很便宜.

所以开销不仅仅是幻像类型或新类型,但它不是很高。

顺便说一句,其他编译器的开销可能会有所不同。例如,JHC 使用有限形式的依赖类型有效地对类型构造函数执行案例分析,因此在 JHC 中工作时,您需要为受约束的类型变量的数量而不是约束的数量付费。

于 2012-04-13T22:16:36.473 回答