在闭合的parens里面的美元的符号

时间:2015-04-17 18:04:49

标签: haskell syntax operator-keyword dollar-sign

Websocket snippet有一个声明,在这样的封闭的parens中有美元符号,

any ($ fst client)

由于haskellers使用$符号代替parens,为什么我们需要parens?

为什么parens之间有$符号?

我试图通过

查看$是否为函数
Prelude>:t $

但它抛出错误parse error on input $

2 个答案:

答案 0 :(得分:13)

在Haskell中,运算符只是普通函数,其名称由符号组成,默认情况下使用中缀。您可以像普通标识符一样使用它们,方法是将它们包装在括号中:

λ> :t (+)
(+) :: Num a => a -> a -> a

$就是这样的运营商。它代表功能应用程序,定义如下:

f $ x = f x

您可以像(+)

那样获取其类型
λ> :t ($)
($) :: (a -> b) -> a -> b

Haskell运算符也可以像普通函数一样部分应用,通过将它们包含在带有一侧参数的括号中。例如,(+ 1)\ x -> x + 1相同,(1 +)\x -> 1 + x相同。

这也适用于$,因此($ fst client)\ f -> f $ fst client\ f -> f (fst client)相同。您检查的代码段是否在给定fst client任何函数列表返回true。

答案 1 :(得分:3)

($ fst client)是一个运算符部分(就像(+ 1)(* 2)) - 它将运算符部分应用于其右操作数。写一个更详细的方法是(\f -> f $ fst client)

所以你将any应用于一个带有另一个函数的函数,并将该函数应用于参数fst client