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

我在GHC6中使用了Haskell 2010.1.0.0.1。在GHCi提示符下键入:t后跟一个函数的名字,显示了函数的types。 有没有办法查看函数定义?

不是现在。

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

:信息名称…

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

对于types和类别,GHCi还总结提及它们的实例。 为了避免显示不相关的信息,仅当(a)其头部提及名称时显示实例,以及(b)实例中提及的所有其他事物由于以下情况而在范围内(合格的或其他):模块命令。

像这样:

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

你可以在Hackage上看到haddock工具生成的标识符的来源。

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

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

 > ?src ($) > f $ x = fx 

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

  • 在HTML haddock文档上,点击“source”…研究源代码。
  • :browse查找模块导出的所有定义
  • 使用:help明显的结果
  • 使用hoogle的Web界面searchfunction,或在本地安装hoogle!
  • 利润!

我不这么认为。 你可以使用:i多一点信息(对中缀操作符和数据结构等更有用),但不是定义:

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

您可以使用hoogle快速查找标准库函数的文档,右侧有一个链接可以find源代码。 尽pipe如此,它仍然是点击几下。