如何在Haskell REPL中查看嵌套函数的类型?
如何在GHCI中查看嵌套where子句里的函数类型?
你可以通过以下几种方式在GHCI中查看嵌套在where子句里的函数类型:
方法一:利用let...in的局部作用域直接查询
在GHCI中,把包含嵌套函数的定义和类型查询命令写在同一行,借助let...in的局部作用域就能访问嵌套函数:
let foo = bar where bar = id in :t bar
执行后会直接返回:
bar :: forall a. a -> a
方法二:借助部分类型签名让GHCI提示类型
开启PartialTypeSignatures扩展后,给嵌套函数加一个占位符类型签名,GHCI会在报错信息中显示推断出的完整类型:
- 先开启扩展:
:set -XPartialTypeSignatures
- 输入带占位符的定义:
let foo = bar where bar = id :: _
GHCI会输出类似提示,其中包含bar的类型:
<interactive>:1:25: error: • Found type wildcard ‘_’ standing for ‘a -> a’ • In the type signature for ‘bar’: bar :: _ • Relevant bindings include bar :: a -> a (bound at <interactive>:1:25) foo :: a -> a (bound at <interactive>:1:5)
方法三:临时将嵌套函数提升为顶层绑定
如果只是临时查看类型,也可以直接把嵌套函数单独定义为顶层函数,查看完成后再移除:
let bar = id :t bar -- 得到 bar :: a -> a :unset bar -- 移除临时绑定
内容的提问来源于stack exchange,提问作者user821596
相关产品推荐
相关产品推荐

