GHCi è stato suggerito meravigliosamente e correttamente, e lo suggerisco anche io.
voglio anche suggerire Hoogle, perché con la ricerca istantanea abilitato (alla barra laterale in alto a destra c'è un pulsante per esso), è possibile cercare le funzioni molto rapidamente, può fornire molto, molto maggiori informazioni di GHCi, e la parte migliore è che non devi menzionare i moduli per cercare in loro . Questo è in contrasto con GHCi dove si deve importare prima:
ghci> :t pure
<interactive>:1:1: Not in scope: ‘pure’
ghci> :m +Control.Applicative
ghci> :t pure
pure :: Applicative f => a -> f a
Il link Hoogle sopra è solo uno (dal sito Haskell.org). Hoogle è un programma che puoi installare anche sulla tua macchina (cabal install hoogle
) ed eseguire query dalla riga di comando (hoogle your-query
).
Sidenote: è necessario eseguire hoogle data
per raccogliere prima le informazioni. Richiede wget/curl, quindi se sei su Windows probabilmente dovresti ottenere this nel tuo percorso prima (o un arricciamento per Windows, ovviamente). Su Linux è quasi sempre integrato (se non lo hai su Linux, solo apt-get
). A proposito, non uso mai Hoogle dalla riga di comando, semplicemente non è così accessibile, ma può comunque essere molto utile perché alcuni editor di testo e i relativi plug-in possono trarne vantaggio.
In alternativa è possibile utilizzare FPComplete's Hoogle che a volte è più soddisfacente (perché nella mia esperienza è stato a conoscenza di più librerie di terze parti. Uso solo in quelle "sessioni di Hoogling").
C'è anche Hayoo! a proposito.
In Hoogle probabilmente> 95% del tempo non sarà necessario fare questo, ma +Module
ad importare un modulo se per qualche motivo non è da ricercare (che è il caso a volte per le biblioteche 3rd party) .
È anche possibile filtrare i moduli di -Module
.
Per esempio: destroyTheWorld +World.Destroyer -World.Destroyer.Mercy
per trovare destroyTheWorld
e assicurarsi che non stai guardando il modo misericordiosa di farlo (questo è molto utile con moduli con gli stessi nomi delle funzioni per le versioni diverse, come quelle in Data.ByteString
& Data.ByteString.Lazy
, Data.Vector
& Data.Vector.Mutable
, ecc.).
Oh e un altro vantaggio di Hoogle è che non solo mostra la firma della funzione, ma può anche portarti alle pagine di Haddock del modulo, così ottieni anche la documentazione + in quelle pagine, quando disponibili, puoi fare clic su "Fonte" a destra di ogni funzione per vedere come viene implementata per ulteriori informazioni.
Questo è al di fuori dello scopo della domanda, ma Hoogle è anche usato per interrogare le firme di funzioni che è solo .. incredibilmente utile. Se voglio una funzione che prende un numero di indice e una lista e mi dà l'elemento in quell'indice, e mi chiedo se è già integrato, posso cercarlo in pochi secondi.
So che la funzione accetta un numero e un elenco e mi fornisce un elemento dell'elenco in modo che la firma della funzione debba apparire come segue: Int -> [a] -> a
(o genericamente: Num a => a -> [b] -> b
), ed entrambe le istanze mostrano che c'è davvero una funzione per quello ((!!)
e genericIndex
).
Dove GHCi ha il braccio superiore è che è possibile giocare con le espressioni, esplorarle, ecc. Molte volte quando si tratta di funzioni astratte significa molto.
Essere in grado di :l
(oad) è davvero molto utile.
Se stai solo cercando firme di funzioni, puoi combinare sia Hoogle che GHCi.
In GHCi è possibile digitare :! cmd
e GHCi eseguirà cmd
nella riga di comando e stampare i risultati. Ciò significa che puoi anche inserire Hoogle all'interno di GHCi, ad es. :! hoogle void
.