class R r where
sum_ :: Integer -> r
instance R Integer where
sum_ x = x
instance (Integral a, R r) => R (a -> r) where
sum_ x = \y -> sum (x + toIngeter y)
上面的代码用于对一系列数字求和,它可以接受可变数量的参数。它运行正常。
但是,如果我将第二个实例更改为:
instance (R r) => R (Integer -> r) where
sum_ x = \y -> sum (x + y)
并启用FlexibleInstances(否则将在ghc 7.10.2中引发编译错误),该函数无法为多个参数运行。
例如,如果我运行
sum_ 1 2
会出现错误:
约束中的非类型变量参数:R(a - > t)
但是,如果我向参数添加显式类型签名,它会正确运行:
sum_ 1 (2::Integer)
为什么2不匹配Integer类型?