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

Haskell中如何查找类型同义词?GHCi查询方法咨询

在Haskell中查看类型同义词的方法

当然有办法查看类型同义词的实际含义,GHCi里提供了专门的命令来帮你搞定这个问题,甚至能直接判断一个类型是不是同义词。

核心命令::info(缩写:i)

这是最实用的命令,不管是类型同义词、数据类型、类还是函数,用:info都能查到详细信息。对于类型同义词,它会直接显示这个同义词对应的底层类型,还会明确标注这是一个type synonym。

举个实际例子,在GHCi里定义一个类型同义词:

Prelude> type UserID = String
Prelude> type Age = Int

然后用:info查看:

Prelude> :i UserID
type UserID = String    -- Defined at <interactive>:1:1
Prelude> :i Age
type Age = Int    -- Defined at <interactive>:2:1

一眼就能看到它们分别是String和Int的同义词。

如果是带参数的类型同义词,比如:

Prelude> type Map k v = [(k, v)]

执行:i Map会得到:

Prelude> :i Map
type Map k v = [(k, v)]    -- Defined at <interactive>:3:1

判断类型是否为同义词

用:info也能直接判断:

  • 如果输出里显示type X = ...,那这个类型就是同义词;
  • 如果是data X = ...或者newtype X = ...,那就是普通的数据类型或新类型,不是同义词。

比如对比一下:

Prelude> newtype Score = Score Int
Prelude> :i Score
newtype Score = Score Int    -- Defined at <interactive>:4:1

这里显示的是newtype,显然不是类型同义词。

小技巧:结合:type辅助验证

如果你想验证某个表达式的实际类型(绕过同义词),可以先用:type查看表达式的类型,再用:info拆解同义词。比如:

Prelude> :type ("u123" :: UserID)
"u123" :: UserID
Prelude> :i UserID
type UserID = String    -- Defined at <interactive>:1:1

这样就能确认UserID本质上就是String。

内容的提问来源于stack exchange,提问作者The Hoff

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:04:55