如何在Haskell/GHCi中查看函数的定义?

fra*_*des 45 haskell ghci

我正在使用Haskell 2010.1.0.0.1和GHC 6. :t在GHCi提示符下键入一个函数的名称,然后显示函数的类型.有没有办法查看函数定义?

Don*_*art 40

不是现在.

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

:信息名称...

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

对于类型和类,GHCi还总结了提及它们的实例.为避免显示不相关的信息,仅在(a)其头部提及名称时显示实例,并且(b)实例中提及的所有其他内容由于以下原因而在范围内(合格或其他):load或:模块命令.

像这样:

Prelude> :info ($)
($) :: (a -> b) -> a -> b   -- Defined in GHC.Base
infixr 0 $
Run Code Online (Sandbox Code Playgroud)

但是,您可以在Hackage上查看由haddock工具生成的标识符的来源.

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

请注意,"?src" lambdaabot中#haskell IRC频道上的有效命令,可以满足您的期望.

> ?src ($)
> f $ x = f x
Run Code Online (Sandbox Code Playgroud)


luq*_*qui 6

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

ghci> :i repeat
repeat :: a -> [a]       -- Defined in GHC.List
Run Code Online (Sandbox Code Playgroud)

您可以使用hoogle快速查找标准库函数的文档,该文档右侧有一个链接指向源文件.它仍然只需点击几下即可.


Tho*_*son 6

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

  • 在HTML haddock文档上,单击"source"...研究源代码.
  • :browse 查找模块导出的所有定义
  • 使用:help了明显效果
  • 使用hoogle的网络界面搜索功能,或在本地安装hoogle!
  • 利润!