在Haskell函数中,总是需要一个参数.通过Currying实现多个参数.既然如此,我可以看到两个参数的函数如何定义为下面的"func1".它是一个函数,它返回一个函数(闭包),它将外部函数的单个参数添加到返回函数的单个参数中.
但是,虽然这是curry函数的工作方式,但这不是定义双参数函数的常规Haskell语法.相反,我们被教导定义像"func2"这样的函数.
我想知道Haskell如何理解func2的行为应该与func1相同.func2的定义没有告诉我它是一个返回函数的函数.相反,它实际上看起来像一个双参数函数,我们被告知不存在!
这里的诀窍是什么?Haskell刚出生,知道我们可以用这种教科书的方式定义多参数函数,并且它们按照我们预期的方式工作吗?也就是说,这是一个似乎没有明确记录的语法约定(Haskell知道你的意思并将为你提供缺失的函数返回),还是有一些其他的魔法在工作或我缺少的东西?
func1 :: Int -> (Int -> Int)
func1 x = (\y -> x + y)
func2 :: Int -> Int -> Int
func2 x y = x + y
main = do
print (func1 7 9)
print (func2 7 9)
Run Code Online (Sandbox Code Playgroud) haskell ×1