|
|
|
|
|
by biscarch
3116 days ago
|
|
All functions in Haskell are single-argument functions. Multiple arguments are syntactic sugar. The syntax sugar can make it confusing to talk about but if you define an `add` function that takes two arguments x and y: add x y = x + y
it's sugar for multiple single-argument functions. add = \x -> \y -> x + y
When examining it this way, the `g` function above would translate to g = \(x, y) -> 2 * x + y
Which is a function taking a single tuple argument. It is still "default curried" but the argument being passed in is a single argument rather than multiple so we don't expand it to multiple single-arg functions. Perhaps it is more illustrative to show the definition as the single argument it is rather than using haskell's destructuring to pull x and y out of the tuple. g tuple = 2 * (fst tuple) + (snd tuple)
and a ghci session for completeness: Prelude> let g (x, y) = 2 * x + y
Prelude> g (1,2)
4
Prelude> let y tuple = 2 * (fst tuple) + (snd tuple)
Prelude> y (1,2)
4
So when we say that Haskell functions are "curried by default", what we're referring to is roughly the underlying single-argument nature of haskell functions. |
|