为什么数字文字2不能与以下代码中的Integer类型匹配?

时间:2015-10-26 05:31:11

标签: haskell

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类型?

0 个答案:

没有答案