2015-04-17 2 views
5

Websocket snippet имеет утверждение, что есть знак доллара внутри закрытых скобок, как это,знак доллара внутри закрытых скобок

any ($ fst client) 

Поскольку haskellers использовать $ знак вместо скобок, зачем нам нужны скобки здесь?

Почему есть символ $ между parens?

Я попытался увидеть, если $ функция, делая

Prelude>:t $ 

Но бросил ошибку, parse error on input $

+2

'3. PROFIT !!!! ' – leppie

ответ

12

В 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). Фрагмент кода у вас есть проверки, если любой списка функций возвращает true с учетом fst client.

+4

Возможно, стоит отметить, что такие частичные приложения называются секциями. – Sarah

3

($ fst client) является раздел оператора (так же, как (+ 1) или (* 2)) - это частично применяется оператора в его правый операнд. Более подробный способ написать это будет (\f -> f $ fst client).

Итак, вы применяете any к функции, которая принимает другую функцию и применяет эту функцию к аргументу fst client.

Смежные вопросы