2015-04-17 13 views
5

Websocket snippet ha una dichiarazione che ha il simbolo del dollaro all'interno di parentesi chiuse come questo,segno del dollaro all'interno di parentesi chiuse

any ($ fst client) 

Dal haskellers utilizzano $ segno al posto di parentesi, perché abbiamo bisogno di parentesi qui?

Perché c'è un simbolo $ tra parentesi?

Ho provato a vedere se $ è una funzione facendo

Prelude>:t $ 

Ma gettato l'errore, parse error on input $

+2

'3. PROFITTO !!!! ' – leppie

risposta

12

In Haskell, gli operatori sono solo normali funzioni che hanno nomi composti da simboli e utilizzati per impostazione predefinita. Si possono usare come un identificatore normale avvolgendoli in parentesi:

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

$ è solo un operatore come questo si. Rappresenta applicazione funzione ed è definito come segue:

f $ x = f x 

È possibile ottenere il suo tipo come (+):

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

operatori Haskell possono anche applicare in parte come normali funzioni, avvolgendoli in parentesi con argomenti da un lato Ad esempio, (+ 1) corrisponde a \ x -> x + 1 e (1 +) corrisponde a \x -> 1 + x.

Questo vale per $ anche, in modo ($ fst client) è uguale \ f -> f $ fst client o semplicemente \ f -> f (fst client). Lo snippet di codice si verifica se qualsiasi di un elenco di funzioni restituisce true dato fst client.

+4

Potrebbe valere la pena notare che questo tipo di applicazioni parziali sono chiamate sezioni. – Sarah

3

($ fst client) è una sezione operatore (come (+ 1) o (* 2)) - applica parzialmente la operatore al suo operando giusto. Un modo più dettagliato per scriverlo sarebbe (\f -> f $ fst client).

Quindi si sta applicando any a una funzione che accetta un'altra funzione e applica tale funzione all'argomento fst client.

Problemi correlati