GHCi đã được đề xuất một cách tuyệt vời và chính xác, và tôi cũng đề xuất nó.
Tôi cũng muốn đề nghị Hoogle, bởi vì với bật, tìm kiếm tức thời (ở thanh bên đầu ở bên phải có một nút cho nó), bạn có thể tìm kiếm cho các chức năng rất nhanh chóng, nó có thể cung cấp nhiều, nhiều nhiều thông tin hơn GHCi và phần tốt nhất là bạn không phải đề cập đến các mô-đun để tìm kiếm trong chúng . Điều này trái ngược với GHCi nơi bạn phải nhập trước:
ghci> :t pure
<interactive>:1:1: Not in scope: ‘pure’
ghci> :m +Control.Applicative
ghci> :t pure
pure :: Applicative f => a -> f a
Liên kết Hoogle ở trên chỉ là một (từ trang Haskell.org). Hoogle là chương trình bạn cũng có thể cài đặt trên máy của mình (cabal install hoogle
) và thực hiện truy vấn từ dòng lệnh (hoogle your-query
).
Sidenote: bạn phải chạy hoogle data
để thu thập thông tin trước. Nó yêu cầu wget/curl, vì vậy nếu bạn đang sử dụng Windows, bạn có thể cần phải có được this trong đường dẫn của mình trước tiên (hoặc curl cho Windows, tất nhiên). Trên Linux, nó hầu như luôn được tích hợp sẵn (nếu bạn không có nó trên Linux, chỉ cần apt-get
nó). Tôi không bao giờ sử dụng Hoogle từ dòng lệnh bằng cách này, nó chỉ đơn giản là không thể truy cập được, nhưng nó vẫn có thể rất hữu ích vì một số trình soạn thảo văn bản và plugin của họ có thể tận dụng nó. Hoặc bạn có thể sử dụng FPComplete's Hoogle mà đôi khi thỏa mãn hơn (bởi vì theo kinh nghiệm của tôi, nó đã nhận thức được nhiều thư viện của bên thứ ba hơn. Tôi chỉ sử dụng nó trong những "phiên làm việc").
Ngoài ra còn có Hayoo! bằng cách này.
Trong Hoogle bạn có thể> 95% thời gian sẽ không phải thực hiện việc này nhưng +Module
để nhập mô-đun nếu vì lý do nào đó không được tìm kiếm (đôi khi là thư viện của bên thứ ba) .
Bạn cũng có thể lọc các mô-đun theo -Module
.
Ví dụ: destroyTheWorld +World.Destroyer -World.Destroyer.Mercy
để tìm destroyTheWorld
và chắc chắn rằng bạn đang không nhìn vào cách thương xót để làm điều đó (này đi kèm rất tiện dụng với các module với tên chức năng tương tự cho các phiên bản khác nhau, như những người thân trong Data.ByteString
& Data.ByteString.Lazy
, Data.Vector
& Data.Vector.Mutable
, v.v.).Oh và một lợi thế tuyệt vời nữa của Hoogle là không chỉ nó cho bạn thấy chữ ký của hàm, nó cũng có thể đưa bạn đến trang Haddock của mô-đun, vì vậy bạn cũng có được tài liệu + trong các trang đó, khi có sẵn, bạn có thể nhấp vào trên "Nguồn" ở bên phải của mọi chức năng để xem cách nó được triển khai để biết thêm thông tin.
Điều này nằm ngoài phạm vi của câu hỏi, nhưng Hoogle cũng được sử dụng để truy vấn các chữ ký chức năng mà chỉ là .. mindblowingly hữu ích. Nếu tôi muốn một hàm lấy số chỉ mục và danh sách và cung cấp cho tôi phần tử trong chỉ mục đó và tôi tự hỏi nếu nó đã được tích hợp sẵn, tôi có thể tìm kiếm nó trong vài giây.
Tôi biết rằng hàm này lấy một số và danh sách, và cung cấp cho tôi một phần tử trong danh sách để chữ ký hàm phải trông giống như sau: Int -> [a] -> a
(hoặc tổng quát: Num a => a -> [b] -> b
) và cả hai trường hợp đều hiển thị một chức năng cho điều đó ((!!)
và genericIndex
).
Trường hợp GHCi có ưu thế là bạn có thể chơi với các biểu thức, khám phá chúng, v.v. Rất nhiều lần khi xử lý các hàm trừu tượng có nghĩa là rất nhiều.
Có thể :l
(oad) rất hữu ích.
Nếu bạn chỉ đang tìm kiếm chữ ký chức năng, bạn có thể kết hợp cả Hoogle và GHCi.
Trong GHCi bạn có thể nhập :! cmd
và GHCi sẽ thực thi cmd
trong dòng lệnh và in kết quả. Điều đó có nghĩa là bạn cũng có thể sử dụng Hoogle trong GHCi, ví dụ: :! hoogle void
.