如何在Haskell中获取在线文档?
有没有像Python下面那样优雅/方便的东西?
>>> help([].count)
Help on built-in function count:
count(...)
L.count(value) -> integer -- return number of occurrences of value
答案 0 :(得分:20)
标准的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获得。