对于此功能:
plus1 = (+) 1
我可以使用:
Prelude> plus1 3
4
plus1的类型是
plus1 :: Integer -> Integer
如何在这里允许函数参数Integer?在我的函数定义中,哪里定义了Integer函数参数?
我不确定我期望发生什么,但是来自Java所有参数都需要定义为方法的一部分,但这里的幕后似乎有些事情会发生?
答案 0 :(得分:8)
(如果我们暂时忽略Num
类型类并假装+ Integer
只能为了简单起见而工作,那么(+)
是类型为Integer -> (Integer -> Integer)
的函数(括号不是必需的,因为->
是右关联的,但我为了清楚起见添加了它们。这意味着它接受类型为Integer
的参数,并生成类型为Integer -> Integer
的函数。
因此,当您将(+)
应用于整数1
时,您确实会获得该类型的函数作为结果。由于add1
包含该结果,因此它是Integer -> Integer
类型的函数,这就是您可以将其应用为plus1 3
的原因。