我用以下三种方式编写了我认为相同的功能:
addThree x y z = x + y + z
addThree' = \x y z -> x + y + z
addThree'' = \x -> \y -> \z -> x + y + z
然而,当我使用:t
加载并检查GHCi中的类型时,它给了我一个非常奇怪的答案:
addThree :: Num a => a -> a -> a -> a
addThree' :: Integer -> Integer -> Integer -> Integer
addThree'' :: Integer -> Integer -> Integer -> Integer
为什么lambda具有不同的特殊类型,而普通的类型具有正确的类型?