Haskell如何处理文档?

时间:2010-09-13 09:01:02

标签: documentation haskell

如何在Haskell中获取在线文档?

有没有像Python下面那样优雅/方便的东西?

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

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

3 个答案:

答案 0 :(得分:20)

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标记,则可以在本地安装。

否则,浏览所有文档的好处是a package list on Hackage。它还允许查看任何软件包早期版本的文档。有时它非常有用。

答案 1 :(得分:12)

目前,无法在ghci中查看Haddock文档,但有a ticket for it

然而,您可以使用:info命令获取一小部分信息,例如

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

这样您至少知道在哪里查找特定功能的文档。

答案 2 :(得分:8)

您可以使用Hoogle按功能名称或其类型签名(可能是近似类型签名)搜索文档。还有一个这个工具的命令行离线版本,你可以从hackage获得。