ghci(或 ghc)有没有办法找到推断的局部函数类型是什么?
例如,如果我有一个功能
f l = map f' l
where f' = (+1)
:t
ghci 中是否有类似的方法来查看推断的类型f'
是什么?
ghci(或 ghc)有没有办法找到推断的局部函数类型是什么?
例如,如果我有一个功能
f l = map f' l
where f' = (+1)
:t
ghci 中是否有类似的方法来查看推断的类型f'
是什么?
确实有,感谢 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
我不知道 GHCi 有什么方法可以做到这一点。
但是,如果您使用的是 Emacs 或 Vim 之类的编辑器,则可以尝试ghc-mod。这是一个插入编辑器的外部工具,它为 Haskell 程序提供了一些类似于 IDE 的功能,包括获取任意表达式类型的能力,包括本地定义。
在 Emacs 中,您将使用C-c C-t
来查找表达式的类型。
如果您不使用 Emacs 或 Vim,您可能可以将 ghc-mod 包装为 GHCi 扩展或其他东西,但我认为这会有些尴尬。如果没有类似编辑器的 UI,我无法想象一个好的方法。但是,ghc-mod 本身只是一个独立的命令行工具,因此很容易使用。如果您能想到一个独立于现有文本编辑器的良好用户界面,那就去吧!
当然,如果您不使用 Emacs 或 Vim,您可能应该:P。
试试hdevtools,它非常快速且易于使用,尽管只有 Vim 的集成。