函数参数是如何定义的?

时间:2014-04-28 19:53:06

标签: haskell currying

对于此功能:

plus1 = (+) 1

我可以使用:

Prelude> plus1 3
4

plus1的类型是

plus1 :: Integer -> Integer

如何在这里允许函数参数Integer?在我的函数定义中,哪里定义了Integer函数参数?

我不确定我期望发生什么,但是来自Java所有参数都需要定义为方法的一部分,但这里的幕后似乎有些事情会发生?

1 个答案:

答案 0 :(得分:8)

(如果我们暂时忽略Num类型类并假装+ Integer只能为了简单起见而工作,那么(+)是类型为Integer -> (Integer -> Integer)的函数(括号不是必需的,因为->是右关联的,但我为了清楚起见添加了它们。这意味着它接受类型为Integer的参数,并生成类型为Integer -> Integer的函数。

因此,当您将(+)应用于整数1时,您确实会获得该类型的函数作为结果。由于add1包含该结果,因此它是Integer -> Integer类型的函数,这就是您可以将其应用为plus1 3的原因。