2012-12-01 12 views
6

Ho un problema nel comprendere un simbolo in Haskell:Simboli a Haskell

=<< 

come in:

-- return the last ten lines of a file 
tail10 = drop =<< subtract 10 . length 

qualcuno può spiegarmi cosa significa questo?

Inoltre, trovo questo accade molto quando sto studiando Haskell è che mi imbatto in uno di questi simboli non ho idea di cosa significano o come funzionano. Esiste un sito o un tutorial che approfondisce solo i simboli di Haskell piuttosto che le funzioni stesse?

+2

Haskell consente di definire i propri operatori di infissi, quindi non è possibile avere un elenco completo di essi da qualche parte. Tuttavia, puoi provare Hoogle - http://www.haskell.org/hoogle/?hoogle=%3D%3C%3C – Vitus

+1

È solo '>> =' con l'ordine degli argomenti invertiti. – huon

+3

e in questo caso, è nella funzione '(r ->)' monad che condivide un argomento tra le funzioni, dove '>> =' è definito come '(f >> = g) x = g (fx) x' , quindi il codice è equivalente a 'tail10 xs = drop ((sottrarre 10. length) xs) xs'. – hammar

risposta

12

Here's a list of the reserved keywords in Haskell. Il =<< che stai chiedendo è solo una funzione, quindi possiamo ask Hoogle. It tells us che =<< è semplicemente >>= con i suoi argomenti invertiti. >>= è una funzione di monade fondamentale ("composizione monadica") che puoi leggere in molti posti, tra cui LYAH.

+1

grazie gspr, questo elenco di parole chiave è esattamente quello che stavo cercando: D – Donna

+0

Quando/se l'hammar scrive il suo commento come una risposta, dovresti accettarlo. In realtà * risponde * a cosa 'drop = << sottrarre 10. lunghezza' fa, che evito. – gspr

+0

Forse "keyword riservata" non è la migliore caratterizzazione di = <<. Il rapporto Haskell, sezione 2.4 Identificatori e operatori, definisce (tra gli altri lessemi) "reservedid" (caso | classe | dati [e così via]) e "reservedop" (.. | :: | = [e così via]). >> = e = << non sono né di questi. Cosa sono, allora? >> = è un metodo esportato da Control.Monad (sezione 13.1) e = << è una funzione di base di Monad (sezione 13.2.2). – rickythesk8r