Интерактивная справка в GHCi
Стандартным REPL на Haskell является GHCi.Хотя получить доступ к полной документации из GHCi невозможно, можно получить довольно много полезной информации.
Типы печати. В 90% случаев этого достаточно для пониманиячто функция делает и как ее использовать.
ghci> :t zipWith
zipWith :: (a -> b -> c) -> [a] -> [b] -> [c]
:t
- это сокращение от :type
.
Печать информации о символах. Это полезно длянайдите, к какому модулю принадлежит символ.Для типа данных это позволяет увидеть его определение и экземпляры классов.Для класса типов он позволяет видеть его интерфейс и список типов, которые являются его экземплярами.
ghci> :i Bool
data Bool = False | True -- Defined in GHC.Bool
instance Bounded Bool -- Defined in GHC.Enum
instance Enum Bool -- Defined in GHC.Enum
instance Eq Bool -- Defined in GHC.Base
instance Ord Bool -- Defined in GHC.Base
instance Read Bool -- Defined in GHC.Read
instance Show Bool -- Defined in GHC.Show
ghci> :i Eq
class Eq a where
(==) :: a -> a -> Bool
(/=) :: a -> a -> Bool
-- Defined in GHC.Classes
instance (Eq a) => Eq (Maybe a) -- Defined in Data.Maybe
instance (Eq a, Eq b) => Eq (Either a b) -- Defined in Data.Either
(many more instances follow)
ghci> :i zipWith
zipWith :: (a -> b -> c) -> [a] -> [b] -> [c]
-- Defined in GHC.List
:i
- это сокращение от :info
.
Виды печати. Используйте :k
для конструкторов типов.
ghci> :k Maybe
Maybe :: * -> *
ghci> :k Int
Int :: *
:k
- это сокращение от :kind
.
Просмотр содержимого модуля. Это позволяетпосмотрите, какие символы предлагает импортированный модуль.
ghci> :browse Data.List
(\\) :: (Eq a) => [a] -> [a] -> [a]
delete :: (Eq a) => a -> [a] -> [a]
deleteBy :: (a -> a -> Bool) -> a -> [a] -> [a]
...
(many lines follow)
:t
, :k
и :i
работают только для символов в области видимости (сначала необходимо импортировать модуль с :m + Module.Name
).:browse
работает для всех доступных модулей.
Электронная документация
Большинство библиотек на Haskell имеют документацию Haddock .Вы можете открыть HTML-версию документации и прочитать подробности.
Вы можете установить ее локально, если в cabal install
установлен флаг --enable-documentation
.
В противном случае, хороший момент дляпросмотреть всю документацию список пакетов на Hackage .Это позволяет просматривать документацию и для более ранних версий любого пакета.Иногда это очень полезно.