Как Haskell занимается документацией?
Как мне получить онлайн-документацию в Haskell?
Есть ли что-нибудь такое элегантное/удобное, как то, что делает Python ниже?
>>> help([].count)
Help on built-in function count:
count(...)
L.count(value) -> integer -- return number of occurrences of value
Ответы
Ответ 1
В настоящее время невозможно просмотреть документацию Haddock в ghci, но есть билет для него.
Однако вы можете получить небольшую информацию, используя команду :info
, например.
ghci> :i nub
nub :: (Eq a) => [a] -> [a] -- Defined in Data.List
чтобы вы хотя бы знали, где искать документацию для конкретной функции.
Ответ 2
Интерактивная справка в GHCi
Стандартным Haskell REPL является 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-версию документации и прочитать подробности.
Вы можете установить его локально, если вы используете флаг --enable-documentation
в cabal install
.
В противном случае хорошей точкой для просмотра всей документации является список пакетов в Hackage. Это позволяет видеть документацию и для более ранних версий любого пакета. Иногда это очень полезно.
Ответ 3
Вы можете использовать Hoogle для поиска документации по имени функции или ее сигнатуре типа (возможно, приблизительной сигнатуры типа). Там также доступна версия командной строки в командной строке, которую вы можете получить из хака.