Haskell 代码和类型中的参数数量不同,为什么?

Number of arguments in Haskell code and type is different, why?

任何人都可以解释下面的代码,请逐步解释它的作用。我知道它正在定义一个函数及其输入,但是 (+) 是做什么的,为什么 plus 中有三个 Int四个 plusplus 的类型中有 Ints,而 plusplus 的代码中似乎只有 3 个参数

 plus :: Int -> Int -> Int 
 plus = (+)

 plusPlus :: Int -> Int -> Int -> Int
 plusPlus a b c = a + b + c

+ 是加法运算符。将运算符放在括号中,如 (+),指的是加法函数本身,而不是使用 + 直接将两个数字相加。基本上,这个:

plus = (+)

相当于:

plus a b = a + b

无论哪种方式,它都将 plus 定义为 + 的同义词。

在Haskell中,->用于分隔参数的类型,以及return值。所以,

plus :: Int -> Int -> Int

是一个需要两个 Int 和 return 一个 Int.

的函数
plusPlus :: Int -> Int -> Int -> Int

是一个需要三个 Int 和 return 一个 Int.

的函数

参数和 return 值的语法相同的原因是 currying.

说实在的迂腐,

plus :: Int -> Int -> Int                -- ~  Int -> (Int -> Int)

是一个接受 Int 的函数,return 是一个接受 Int 的函数,return 接受 Int.

plusPlus :: Int -> Int -> Int -> Int     -- ~  Int -> (Int -> (Int -> Int))

是一个接受 Int 的函数,return 是一个接受 Int 的函数,return 是一个接受 Int 的函数return 和 Int.

在实践中,将 Haskell 函数称为采用多个参数是很方便的。但从技术上讲,Haskell 函数总是接受一个参数。参数类型在->的左侧,return类型在->的右侧,但return类型本身可能是另一个函数。