2015-04-17 22 views
5

Websocket snippet hat eine Aussage, die Dollarzeichen in geschlossenen Pars wie diese hat,Dollarzeichen in geschlossenen Pars

any ($ fst client) 

Seit haskellers verwenden $ Zeichen statt Pars, warum wir Pars hier brauchen?

Warum gibt es ein $ Symbol zwischen Parens?

ich sehen wollte, wenn $ eine Funktion

indem ist
Prelude>:t $ 

Aber es warf den Fehler, parse error on input $

+2

'3. PROFIT !!!! ' – leppie

Antwort

12

In Haskell sind Operatoren nur normale Funktionen, deren Namen standardmäßig aus Symbolen und Infix bestehen. Sie können sie wie ein normalen Bezeichner verwenden, indem man sich in Klammern Verpackung:

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

$ nur ein Operator wie diese selbst. Es stellt Anwendungsfunktion und ist wie folgt definiert:

f $ x = f x 

Sie seinen Typ wie (+) bekommen:

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

Haskell Betreiber können auch teilweise wie normale Funktionen angewendet werden, indem man sie in Klammern Umwickeln mit Argumente auf eine Seite. Zum Beispiel ist (+ 1) das gleiche wie \ x -> x + 1 und (1 +) ist das gleiche wie \x -> 1 + x.

Dies gilt für $ auch so ($ fst client) ist die gleiche wie \ f -> f $ fst client oder nur \ f -> f (fst client). Das Code-Snippet, das Sie überprüfen, ob any einer Liste von Funktionen gibt True zurückgegeben fst client.

+4

Es kann erwähnenswert sein, dass diese Art von Teilanwendungen Abschnitte genannt werden. – Sarah

3

($ fst client) ist ein Operator Abschnitt (wie (+ 1) oder (* 2)) - es gilt teilweise die Operator zu seinem rechten Operanden. Eine ausführlichere Art, es zu schreiben wäre (\f -> f $ fst client).

Sie wenden also any auf eine Funktion an, die eine andere Funktion übernimmt und diese Funktion auf das Argument fst client anwendet.