函數(shù)“$”稱為function application operator,定義如下:
($) :: (a -> b) -> a -> b
f $ x = f x
與函數(shù)調(diào)用不同的是,函數(shù)調(diào)用具有高優(yōu)先級,而“$”具有最低優(yōu)先級。
函數(shù)調(diào)用具有左結(jié)合性,而“$”具有右結(jié)合性。
f a b c = ((f a) b) c
f $ g $ h $ x = f $ (g $ (h $ x))
使用“$”可以減少括號。
例如:
sum (map sqrt [1..130]) = sum $ map sqrt [1..130]
sqrt (3 + 4 + 9) = sqrt $ 3 + 4 + 9
sum (filter (> 10) (map (* 2) [2..10])) = sum $ filter (> 10) $ map (* 2) [2..10]
我們可以等價的認(rèn)為,把“$”替換成一個左括號,然后在表達(dá)式的最有表加上一個右括號。
除了可以減少括號,“$”還可以把函數(shù)調(diào)用當(dāng)做一個函數(shù)來對待。
($ 3) :: (Int -> b) -> b
它是一個函數(shù),接受一個函數(shù)作為參數(shù),返回這個參數(shù)函數(shù)作用到3的結(jié)果。
> map ($ 3) [(4 +), (10 *), (^ 2), sqrt]
[7.0, 30.0, 9.0, 1.7320508075688772]