闭括号内的美元符号
Dollar sign inside closed parens
Websocket snippet 有一个语句在封闭的括号内有美元符号,像这样,
any ($ fst client)
既然 haskellers 使用 $
符号而不是括号,为什么我们在这里需要括号?
为什么括号之间有一个$
符号?
我试图通过
来查看 $
是否是一个函数
Prelude>:t $
但是它抛出了错误,parse error on input $
($ fst client)
是一个运算符部分(就像 (+ 1)
或 (* 2)
)——它部分地将运算符应用于它的右操作数。更详细的写法是 (\f -> f $ fst client)
.
因此,您正在将 any
应用于一个接受另一个函数并将该函数应用于参数 fst client
的函数。
在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
.
函数列表 returns 的 any 是否为真
Websocket snippet 有一个语句在封闭的括号内有美元符号,像这样,
any ($ fst client)
既然 haskellers 使用 $
符号而不是括号,为什么我们在这里需要括号?
为什么括号之间有一个$
符号?
我试图通过
来查看$
是否是一个函数
Prelude>:t $
但是它抛出了错误,parse error on input $
($ fst client)
是一个运算符部分(就像 (+ 1)
或 (* 2)
)——它部分地将运算符应用于它的右操作数。更详细的写法是 (\f -> f $ fst client)
.
因此,您正在将 any
应用于一个接受另一个函数并将该函数应用于参数 fst client
的函数。
在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
.