Знак доллара внутри закрытых паренов

У фрагмента Websocket есть утверждение, у которого есть знак доллара внутри закрытых паренов, как это,

any ($ fst client)

Так как Haskellers используют $ знак вместо парней, зачем нам здесь парены?

Почему есть $ символ между паранами?

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

Prelude>:t $

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

2 ответа

Решение

В 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,

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

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

Другие вопросы по тегам