GHCi było cudownie i poprawnie zasugerowane, a ja to też sugeruję.
Ja też chcę sugerować Hoogle, ponieważ z instant wyszukiwania włączona (w górnym pasku po prawej stronie znajduje się przycisk do niego), można wyszukać funkcji bardzo szybko, może ona dostarczyć dużo, znacznie więcej informacji niż GHCi, a najlepsze jest to, że nie musisz wymieniać modułów do wyszukiwania w nich . Jest to w przeciwieństwie do GHCi gdzie trzeba importować pierwszy:
ghci> :t pure
<interactive>:1:1: Not in scope: ‘pure’
ghci> :m +Control.Applicative
ghci> :t pure
pure :: Applicative f => a -> f a
Hoogle Link powyżej jest tylko jeden (ze strony Haskell.org). Hoogle to program, który możesz również zainstalować na swoim komputerze (cabal install hoogle
) i wykonywać zapytania z wiersza poleceń (hoogle your-query
).
Sidenote: będziesz musiał uruchomić hoogle data
, aby najpierw zebrać informacje. Wymaga to wget/curl, więc jeśli jesteś w systemie Windows, prawdopodobnie będziesz musiał najpierw uzyskać ścieżkę this (lub oczywiście curl dla Windows). W Linuksie prawie zawsze jest wbudowany (jeśli nie masz go na Linuksie, tylko apt-get
). Nigdy nie używam Hoogle z linii poleceń, ale nie jest to tak łatwo dostępne, ale nadal może być bardzo pomocne, ponieważ niektóre edytory tekstu i ich wtyczki mogą z nich korzystać.
Alternatywnie można użyć funkcji FPComplete's Hoogle, która jest czasami bardziej satysfakcjonująca (ponieważ z mojego doświadczenia wynika, że jest ona świadoma większej liczby bibliotek zewnętrznych, używam jej tylko w tych "sesjach Hoogling").
Przy okazji jest również Hayoo!.
W Hoogle prawdopodobnie> 95% czasu nie będzie musiał to zrobić, ale +Module
zaimportować moduł jeśli z jakiegoś powodu to nie jest przeszukiwana (co ma miejsce czasami bibliotek 3rd party) .
Można również odfiltrować moduły przez -Module
.
Na przykład: destroyTheWorld +World.Destroyer -World.Destroyer.Mercy
znalezienia destroyTheWorld
i upewnić się, że nie patrzymy na miłosiernej sposób to zrobić (ten jest bardzo przydatny z modułów o takich samych nazwach funkcji dla różnych wersjach, takich jak te, które w Data.ByteString
& Data.ByteString.Lazy
, Data.Vector
& Data.Vector.Mutable
itp.).
Oh i jeszcze jedną niesamowitą zaletą Hoogle jest to, że nie tylko pokazuje podpis funkcji, ale może również przenieść się na strony modułu Haddock, dzięki czemu zyskujesz także dokumentację + na tych stronach, gdy są dostępne, możesz kliknąć na "Źródło" po prawej stronie każdej funkcji, aby sprawdzić, w jaki sposób jest realizowany w celu uzyskania jeszcze większej ilości informacji.
To wykracza poza zakres pytania, ale Hoogle służy również do sprawdzania sygnatur funkcji, które są po prostu ... niezwykle pomocne. Jeśli chcę funkcji, która pobiera numer indeksu i listę i daje mi element w tym indeksie, i zastanawiam się, czy jest już wbudowany, mogę go wyszukać w ciągu kilku sekund.
Wiem, że funkcja pobiera liczbę i listę, i podaje mi element listy, więc podpis funkcji musi wyglądać następująco: Int -> [a] -> a
(lub ogólnie: Num a => a -> [b] -> b
), a obie instancje pokazują, że naprawdę istnieje funkcja do tego ((!!)
i genericIndex
).
Gdzie GHCi ma przewagę, to że można bawić się wyrażeniami, eksplorować je itd. Wiele razy, gdy mamy do czynienia z funkcjami abstrakcyjnymi, oznacza to dużo.
Będąc w stanie :l
(oad) jest bardzo pomocny, jak-dobrze.
Jeśli po prostu szukasz sygnatur funkcji, możesz połączyć zarówno Hoogle, jak i GHCi.
W GHCi możesz wpisać :! cmd
, a GHCi wykona cmd
w linii poleceń i wydrukuje wyniki. Oznacza to, że możesz również Hoogle w GHCi, np. :! hoogle void
.