Как Haskell справляется с документацией? - PullRequest
13 голосов
/ 13 сентября 2010

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

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

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

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

Ответы [ 3 ]

20 голосов
/ 13 сентября 2010

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

12 голосов
/ 13 сентября 2010

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

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

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

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

8 голосов
/ 13 сентября 2010

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

...