[Haskell] $

函数“$”称为function application operator,定义如下:

($) :: (a -> b) -> a -> b
f $ x = f x

与函数调用不同的是,函数调用具有高优先级,而“$”具有最低优先级
函数调用具有左结合性,而“$”具有右结合性

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]

我们可以等价的认为,把“$”替换成一个左括号,然后在表达式的最有表加上一个右括号。

除了可以减少括号,“$”还可以把函数调用当做一个函数来对待。

($ 3) :: (Int -> b) -> b

它是一个函数,接受一个函数作为参数,返回这个参数函数作用到3的结果。

> map ($ 3) [(4 +), (10 *), (^ 2), sqrt]
[7.0, 30.0, 9.0, 1.7320508075688772]

你可能感兴趣的:([Haskell] $)