对于这个功能:
plus1 = (+) 1
Run Code Online (Sandbox Code Playgroud)
我可以用 :
Prelude> plus1 3
4
Run Code Online (Sandbox Code Playgroud)
plus1的类型是
plus1 :: Integer -> Integer
Run Code Online (Sandbox Code Playgroud)
如何在这里允许函数参数Integer?在我的函数定义中,定义了Integer函数参数?
我不确定我期望发生什么,但是来自Java,所有参数都需要被定义为方法的一部分,但这里似乎有一些事情在幕后发生?
(如果我们Num暂时忽略类型类并且假设+ Integer仅仅为了简单起见而在s上工作),(+)则是类型的函数Integer -> (Integer -> Integer)(括号不是必需的,因为它->是右关联的,但我为了清楚起见添加了它们).这意味着它接受一个类型的参数,Integer并生成一个类型的函数Integer -> Integer作为其结果.
因此,当您应用于(+)Integer时1,您确实会获得该类型的函数作为结果.由于add1保持结果,因此它是类型的函数,Integer -> Integer这就是为什么你可以应用它plus1 3.