Websocket スニペットには、次のような閉じた括弧内にドル記号があるステートメントがあります。
any ($ fst client)
haskellers はかっこ$
の代わりに記号を使用するのに、なぜここでかっこが必要なのでしょうか?
$
括弧の間に記号があるのはなぜですか?
私$
は実行して関数であるかどうかを確認しようとしました
Prelude>:t $
しかし、それはエラーを投げました、parse error on input $
Websocket スニペットには、次のような閉じた括弧内にドル記号があるステートメントがあります。
any ($ fst client)
haskellers はかっこ$
の代わりに記号を使用するのに、なぜここでかっこが必要なのでしょうか?
$
括弧の間に記号があるのはなぜですか?
私$
は実行して関数であるかどうかを確認しようとしました
Prelude>:t $
しかし、それはエラーを投げました、parse error on input $
Haskell では、演算子は、シンボルで構成され、デフォルトで infix を使用する名前を持つ単なる通常の関数です。括弧で囲むことにより、通常の識別子と同じように使用できます。
λ> :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)
. あなたが持っているコードスニペットは、与えられた関数のリストのいずれかが true を返すかどうかをチェックしますfst client
。
($ fst client)
演算子セクションです ( (+ 1)
orと同様(* 2)
) - 演算子をその右側のオペランドに部分的に適用します。それを書くためのより冗長な方法は(\f -> f $ fst client)
.
したがってany
、別の関数を受け取り、その関数を引数に適用する関数に適用していますfst client
。