标题几乎总结了我的问题:是否存在与Haskell的类型类相关的运行时损失,或者它只是其中之一(如幻像类型)而没有任何运行时结果?
答案 0 :(得分:16)
需要一个类型类就像将一个额外的参数传递给包含类型类成员的函数作为数据结构,因为幕后是它在GHC中所遇到的。
也就是说,GHC非常擅长将使用类型类的代码内联并专门化到不成问题的地方,其中-O2很大一部分只是消失了,但即使没有那种优化级别传递参数非常便宜。
因此,开销 比幻像类型或新类型更多,但它不是很高。
另外,其他编译器的开销可能会有所不同。例如JHC使用有限形式的依赖类型有效地对类型构造函数执行案例分析,因此您需要支付约束类型变量的数量,而不是在JHC中工作时的约束数量。