As a newbie of Haskell
, I find the life becomes easier once I understand function application:
(1) function application is actually “function call”. For example, define a simple add
function who returns the sum of 2 numbers:
# cat add.hs
add :: Num a => a -> a -> a
add a b = a + b
Load it in ghci
, and call this function:
# ghci
GHCi, version 8.2.2: http://www.haskell.org/ghc/ :? for help
Prelude> :l add
[1 of 1] Compiling Main ( add.hs, interpreted )
Ok, one module loaded.
*Main> add 2 4
6
*Main> add 3 6
9
Beware that the tokens in function application are separated by space. So once you see following format:
a b ..
You know it is a function application, and also a “function call”.
(2) function application has the highest precedence. Check following example:
*Main> add 1 2 ^ add 1 2
27
It is equal to “(add 1 2) ^ (add 1 2)
” literally.
(3) $
operator is “application operator”, and it is right associative, and has lowest precedence. Check following instance:
*Main> add 1 $ add 2 $ add 3 4
10
The $
operator divides the expression into 3
parts: “add 1
“, “add 2
” and add 3 4
. Because $
is right associative, the result of add 3 4
is fed into add 2
function first; then the result of add 2 $ add 3 4
is passed into add 1
. It is equal to “add 1 ( add 2 ( add 3 4 ) )
” in fact, so $
can be used to remove parentheses.
References:
Prelude;
Calling functions.