2015-04-17 36 views
5

Websocket snippet zawiera oświadczenie, że posiada znak dolara wewnątrz zamkniętych parens takiego,Znak dolara wewnątrz zamkniętych parens

any ($ fst client) 

Od haskellers używać $ znak zamiast parens, dlaczego potrzebujemy parens tutaj?

Dlaczego między parens znajduje się symbol $?

Próbowałem sprawdzić, czy $ jest funkcją wykonując

Prelude>:t $ 

Ale wyrzucił błąd, parse error on input $

+2

'3. ZYSK !!!! ' – leppie

Odpowiedz

12

W języku Haskell operatory są zwykłymi funkcjami, które domyślnie mają nazwy złożone z symboli i użytego infiks. Można ich używać tak jak zwykły identyfikator owijając je w nawiasach:

λ> :t (+) 
(+) :: Num a => a -> a -> a 

$ jest tylko ten sam operator niczym. Reprezentuje ona zastosowanie funkcji i jest zdefiniowany następująco:

f $ x = f x 

można dostać jego rodzaj jak (+):

λ> :t ($) 
($) :: (a -> b) -> a -> b 

operatorzy Haskell może również być częściowo stosowana jak normalne funkcje, owijając je w nawiasach z argumenty z jednej strony. Na przykład (+ 1) jest taki sam jak \ x -> x + 1, a (1 +) jest taki sam jak \x -> 1 + x.

To samo dotyczy $, więc ($ fst client) jest takie samo jak \ f -> f $ fst client lub tylko \ f -> f (fst client). Fragment kodu, który masz sprawdzić, czy dowolna z listy funkcji zwraca true podane fst client.

+4

Warto zauważyć, że tego rodzaju częściowe aplikacje nazywane są sekcjami. – Sarah

3

($ fst client) jest sekcja operator (podobnie jak (+ 1) lub (* 2)) - dotyczy częściowo operator do jego prawego argumentu. Bardziej zwięzłym sposobem napisania byłoby (\f -> f $ fst client).

A więc aplikujesz any do funkcji, która przyjmuje inną funkcję i stosuje tę funkcję do argumentu fst client.