haskell中的Lambda表达式有不同的类型

Don*_*Joe 6 haskell types ghc

我正在努力学习Haskell.

我们有非常简单的功能.据我所知,以下所有内容都是等效的.

但我不明白为什么f2,f2'有不同的类型,为什么到底Integer.

此外,如果我指定f2'手动类型,它接受它并且工作相同f2.

f x = x + 1
-- f :: Num a => a -> a

f' = \x -> x + 1
-- f' :: Num a => a -> a

f2 a b = a + b
-- f2 :: Num a => a -> a -> a

f2' = \a b -> a + b
-- f2 :: Integer -> Integer -> Integer

f2'' = \a -> \b -> a + b
-- f2 :: Integer -> Integer -> Integer
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?