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

5 syntax haskell dollar-sign operator-keyword

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

any ($ fst client)
Run Code Online (Sandbox Code Playgroud)

因为haskellers使用$sign而不是parens,为什么我们需要parens?

为什么$parens之间有符号?

我试着看看是否$是一个功能

Prelude>:t $
Run Code Online (Sandbox Code Playgroud)

但它抛出了错误, parse error on input $

Tik*_*vis 13

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

?> :t (+)
(+) :: Num a => a -> a -> a
Run Code Online (Sandbox Code Playgroud)

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

f $ x = f x
Run Code Online (Sandbox Code Playgroud)

你可以得到它的类型(+):

?> :t ($)
($) :: (a -> b) -> a -> b
Run Code Online (Sandbox Code Playgroud)

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

这适用于$太多,所以($ fst client)相同\ f -> f $ fst client或只是\ f -> f (fst client).您检查的代码片段是否有任何函数列表返回true给定fst client.

  • 值得注意的是,这些部分应用程序称为部分. (4认同)