5

Websocket スニペットには、次のような閉じた括弧内にドル記号があるステートメントがあります。

any ($ fst client)

haskellers はかっこ$の代わりに記号を使用するのに、なぜここでかっこが必要なのでしょうか?

$括弧の間に記号があるのはなぜですか?

$は実行して関数であるかどうかを確認しようとしました

Prelude>:t $

しかし、それはエラーを投げました、parse error on input $

4

2 に答える 2

13

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

于 2015-04-17T18:19:24.157 に答える
3

($ fst client)演算子セクションです ( (+ 1)orと同様(* 2)) - 演算子をその右側のオペランドに部分的に適用します。それを書くためのより冗長な方法は(\f -> f $ fst client).

したがってany、別の関数を受け取り、その関数を引数に適用する関数に適用していますfst client

于 2015-04-17T18:19:00.423 に答える