我正在浏览A brief introduction to Haskell并已来到section on currying。 (所以,请更正我在术语中所犯的任何错误。)
本节说:
这是以我们通常的方式定义的双参数函数。
Prelude> let myadd x y = x + y Prelude> myadd 3 4 7
然后再进一步说明:
这是定义myadd的第三种等效方法,作为返回另一个匿名函数的匿名函数。
Prelude> let myadd = \x -> \y -> x + y Prelude> :t myadd myadd :: Integer -> Integer -> Integer
即使它说“等效”,但令人惊讶的是(对于像我这样的初学者)并非如此,因为myadd
的类型更为通用:
Prelude> :t myadd
myadd :: Num a => a -> a -> a
Prelude> myadd 1.5 2.5
4.0
Prelude> myadd3 1.5 2.5
<interactive>:12:8:
No instance for (Fractional Integer) arising from the literal `1.5'
Possible fix: add an instance declaration for (Fractional Integer)
In the first argument of `myadd3', namely `1.5'
In the expression: myadd3 1.5 2.5
In an equation for `it': it = myadd3 1.5 2.5