Как Haskell справляется с документацией?

Как я могу получить онлайн документацию в Haskell?

Есть ли что-нибудь столь же элегантное / удобное, как то, что Python делает ниже?

>>> help([].count)
Help on built-in function count:

count(...)
    L.count(value) -> integer -- return number of occurrences of value

3 ответа

Решение

В настоящее время нет возможности просмотреть документацию Haddock в ghci, но есть билет для этого.

Однако вы можете получить немного информации, используя :info команда, например

ghci> :i nub
nub :: (Eq a) => [a] -> [a]     -- Defined in Data.List  

так что вы хотя бы знаете, где искать документацию для конкретной функции.

Интерактивная помощь в 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. Это позволяет просматривать документацию и для более ранних версий любого пакета. Иногда это очень полезно.

Вы можете использовать Hoogle для поиска документации по имени функции или ее сигнатуре (возможно, приблизительной сигнатуре). Есть также автономная версия этого инструмента для командной строки, которую вы можете получить с помощью hackage.

Другие вопросы по тегам