14

ghci(或 ghc)有没有办法找到推断的局部函数类型是什么?

例如,如果我有一个功能

f l = map f' l
   where f' = (+1)

:tghci 中是否有类似的方法来查看推断的类型f'是什么?

4

3 回答 3

8

确实有,感谢 hammar在这里的出色回答,我了解到这一点。这是简短的版本:

Prelude> :l /tmp/foo.hs
[1 of 1] Compiling Main             ( /tmp/foo.hs, interpreted )
Ok, modules loaded: Main.
*Main> :break f
Breakpoint 0 activated at /tmp/foo.hs:(1,1)-(2,18)
*Main> f [1..10]
Stopped at /tmp/foo.hs:(1,1)-(2,18)
_result :: [b] = _
[/tmp/foo.hs:(1,1)-(2,18)] *Main> :step
Stopped at /tmp/foo.hs:1:7-14
_result :: [b] = _
f' :: b -> b = _
l :: [b] = _
[/tmp/foo.hs:1:7-14] *Main> :t f'
f' :: b -> b
于 2013-02-23T01:41:46.937 回答
5

我不知道 GHCi 有什么方法可以做到这一点。

但是,如果您使用的是 Emacs 或 Vim 之类的编辑器,则可以尝试ghc-mod。这是一个插入编辑器的外部工具,它为 Haskell 程序提供了一些类似于 IDE 的功能,包括获取任意表达式类型的能力,包括本地定义。

在 Emacs 中,您将使用C-c C-t来查找表达式的类型。

如果您不使用 Emacs 或 Vim,您可能可以将 ghc-mod 包装为 GHCi 扩展或其他东西,但我认为这会有些尴尬。如果没有类似编辑器的 UI,我无法想象一个好的方法。但是,ghc-mod 本身只是一个独立的命令行工具,因此很容易使用。如果您能想到一个独立于现有文本编辑器的良好用户界面,那就去吧!

当然,如果您不使用 Emacs 或 Vim,您可能应该:P。

于 2013-02-23T00:53:28.257 回答
0

试试hdevtools,它非常快速且易于使用,尽管只有 Vim 的集成。

于 2013-02-23T08:05:37.840 回答