61

我正在使用带有 GHC 6 的 Haskell 2010.1.0.0.1。:t在 GHCi 提示符后键入函数名称,向我们显示函数的类型。有没有办法查看函数定义?

4

3 回答 3

45

不是现在。

最接近您想要的命令是:info

:信息名称...

显示有关给定名称的信息。例如,如果 name 是一个类,则将打印类方法及其类型;如果 name 是类型构造函数,则将打印其定义;如果 name 是一个函数,那么它的类型将被打印出来。如果 name 已从源文件加载,则 GHCi 还将显示其定义在源中的位置。

对于类型和类,GHCi 还总结了提及它们的实例。为了避免显示不相关的信息,仅当 (a) 其头部提到名称,并且 (b) 实例中提到的所有其他事物都在范围内(无论是限定的还是其他的)作为 :load 或的结果时,才会显示一个实例:模块命令。

像这样:

Prelude> :info ($)
($) :: (a -> b) -> a -> b   -- Defined in GHC.Base
infixr 0 $

不过,您可以在 Hackage 上查看黑线鳕工具生成的标识符的来源。

  1. 在 Hackage 上查找模块
  2. 点击源链接

请注意,“?src”lambdabot 中的有效命令,在 #haskell IRC 频道上,并且执行您所期望的操作。

> ?src ($)
> f $ x = f x
于 2011-04-26T05:46:51.970 回答
8

不,不能那样做。Haskell 初学者可以做一些有趣的事情:

  • 在 HTML haddock 文档上,单击“源”...研究源。
  • :browse 查找模块导出的所有定义
  • 用于:help明显的结果
  • 使用hoogle的web界面搜索功能,或者本地安装hoogle!
  • ?
  • 利润!
于 2011-04-26T05:46:50.543 回答
7

我不这么认为。您可以使用:i更多信息(对于中缀运算符和数据构造等更有用),但不能使用定义:

ghci> :i repeat
repeat :: a -> [a]       -- Defined in GHC.List

您可以使用hoogle快速找到标准库函数的文档,右侧有指向源代码的链接。不过,仍然需要点击几下。

于 2011-04-26T05:45:30.997 回答