Подтвердить что ты не робот

Как Haskell занимается документацией?

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

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

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

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

Ответ 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 для поиска документации по имени функции или ее сигнатуре типа (возможно, приблизительной сигнатуры типа). Там также доступна версия командной строки в командной строке, которую вы можете получить из хака.