我定义了五个在我看来应该是等价的函数(因此,它们具有相同的类型)。但是推断的类型是不同的。我在 type-inference.hs 中加入了以下五行:
f1 a b = a + b
f2 a = \b -> a + b
f3 = \a -> \b -> a + b
f4 a = (a+)
f5 = (+)
然后我加载了Hugs:
Hugs> :load type-inference.hs
Main> :type f1
f1 :: Num a => a -> a -> a
Main> :type f2
f2 :: Num a => a -> a -> a
Main> :type f3
f3 :: Integer -> Integer -> Integer
Main> :type f4
f4 :: Num a => a -> a -> a
Main> :type f5
f5 :: Integer -> Integer -> Integer
这里发生了什么?