【发布时间】:2014-09-03 08:51:46
【问题描述】:
我收到了一些奇怪的类型类错误,形式为“没有由表达式类型签名引起的 (Test a0) 实例”。这是我能想到的最简单的违规代码版本:
class Test a where
test :: a
foo = test
添加类型没有帮助:
foo = test :: Test a => a
但是,添加 Test 实例确实可以编译:
instance Test Int where
test = 0
这是不可接受的,因为我希望在其他地方声明我的实例。
最后,将-XNoMonomorphismRestriction 传递给 ghc(i) 也允许它编译。虽然现在这已经足够好了,但我不明白这个扩展的作用,为什么它是必要的,或者可能潜伏着什么缺点。
【问题讨论】: