You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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会在报错信息中显示推断出的完整类型:

  1. 先开启扩展:
:set -XPartialTypeSignatures
  1. 输入带占位符的定义:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 22:18:30