23

是否可以从终端或 ghci 获取 Haskell 文档?

在 Ruby 中,我通常会这样做

ri thefunc

在 Perl 我通常做

perldoc -f thefunc

或者我可以help在 Python 中进行交互。

如何在 Haskell 中做这种事情?例如,如果我想获得关于终端的文档[]:


更新

我找到了这个相关的线程,但我不确定:i答案是否是:-/ 是吗?

*Main> :i []
data [] a = [] | a : [a]    -- Defined in GHC.Types
instance (Eq a) => Eq [a] -- Defined in GHC.Base
instance Monad [] -- Defined in GHC.Base
instance Functor [] -- Defined in GHC.Base
instance (Ord a) => Ord [a] -- Defined in GHC.Base
instance (Read a) => Read [a] -- Defined in GHC.Read
instance (Show a) => Show [a] -- Defined in GHC.Show
4

4 回答 4

12

你想要的叫做Hoogle。它实际上比大多数命令行文档工具更酷,因为它可以按名称或类型查找函数,并且非常聪明地计算出兼容但不完全符合您指定的类型(例如,您可以搜索a -> [a]和它会发现您可能想要一个具有 type 的函数,(Monad m) => a -> m a您搜索的类型与填写的 typeclass 相同)。

于 2011-07-06T04:33:41.823 回答
5

正如这个答案所说,没有办法从 ghci 获取文档。然而,在 Haskell 中,类型比 Java(或明显的动态类型语言,如 Ruby 和 Python)提供的信息更多;它们可以暗示函数的工作原理,并告诉您如何编写它们。

在 ghci 中,您可以尝试:browse查看所有顶级函数的类型,或者使用包名作为参数,例如:browse Control.Monad. 如果您已经了解某个功能,但不确定如何使用它(否则,请按照其他人的建议使用 Hoogle 或 Hayoo),这将非常有用。您还可以使用:t来获取表达式的类型,或:i获取有关类型类的信息。

编辑——我知道这有点自以为是,但我认为参数类型等的存在以及体面的“核心”功能使得不阅读文档变得更容易一些,至少与 Java 或 C 相比(也许没有那么多 Python 或 Ruby)。

于 2011-07-06T06:09:03.303 回答
4

有一个 GHCi 扩展名为“GHCi on Acid (GOA)”:

http://www.haskell.org/haskellwiki/GHC/GHCi#GHCi_on_Acid

不完全是ri,但它是使用 Hoogle 和 REPL 中其他细节的便捷方式。

于 2011-07-06T10:51:44.170 回答
4

我使用HoogleHayoo!.

于 2011-07-06T05:57:25.063 回答