ami*_*dfv 14 haskell type-inference ghci
在ghci(或ghc)中有没有办法找到本地函数的推断类型是什么?
例如,如果我有一个功能
f l = map f' l
where f' = (+1)
Run Code Online (Sandbox Code Playgroud)
是: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
Run Code Online (Sandbox Code Playgroud)
我不知道GHCi是怎么做的.
但是,如果你使用像Emacs或Vim这样的编辑器,你可以试试ghc-mod.这是一个外部工具,可插入编辑器,为Haskell程序提供类似IDE的功能,包括获取任意表达式类型的能力,包括本地定义.
在Emacs中,您将使用C-c C-t查找表达式的类型.
如果你没有使用Emacs或Vim,你可以将ghc-mod包装为GHCi扩展或其他东西,但我认为这有点尴尬.没有像编辑器这样的用户界面,我无法想象一个好方法.但是,ghc-mod本身只是一个独立的命令行工具,因此很容易使用.如果您能想到一个独立于现有文本编辑器的良好用户界面,那就去吧!
当然,如果你不使用Emacs或Vim,你可能应该:P.