[Haskell-cafe] Function Precedence
loup.vaillant at gmail.com
Tue Apr 1 08:05:34 EDT 2008
2008/4/1, Jules Bean <jules at jellybean.co.uk>:
> PR Stanley wrote:
> > Why can't we have
> > function application implemented outwardly (inside-out).
> No reason we can't.
> We could.
> We just don't.
> People have spent some time thinking and experimenting and have decided
> this way round is more convenient. It's certainly possible to disagree.
I bet this "time and thinking" involved currying. For instance, with:
f :: int -> int -> int
f a b = a + b + 3
Let's explore the two possibilities
(1) f 4 2 <=> (f 4) 2 -- don't need parentheses
(2) f 4 2 <=> f (4 2) -- do need parentheses: (f 4) 2
Curried functions are pervasive, so (1) just saves us more brakets
than (2) does.
> > f g x
> > returns an error because f takes only one argument.
Do not forget that *every* function take only one argument. The trick
is that the result may also be a function. Therefore,
f g 5 <=> id id 5 <=> (id id) 5 <=> id 5 <=> 5
indeed do run smoothly (just checked in the Ocaml toplevel, thanks to
Jerzy for pointing this out).
More information about the Haskell-Cafe