如何在 GHCi 中列出具有应用类型参数的类型的实例

How to list instances for a type with applied type parameter in GHCi

我注意到我不知道如何让 GHCi 打印关于复合类型的信息。 让我们考虑例子

data X a = X (a Int)
type XList = X []

instance Show XList where show (X l) = "X (" ++ show l ++ ")"

我想看看 "X []" 是如何实现 Show 的。

尝试 1

λ :i (X [])

<interactive>:1:2: error: parse error on input ‘X’

尝试 2 - 打印列表实例但不打印 (X [])

λ :i X []

尝试 3 - 与实例无关

λ :i XList
type XList = X []   -- Defined at <interactive>:20:1

尽管如此,Show 实例在适用时仍在运行

λ show (X [1,2,3])
"X ([1,2,3])"

λ show (X ['1'])

<interactive>:31:18: error:
    • Couldn't match expected type ‘Int’ with actual type ‘Char’

:info:i 的缩写)仅适用于名称,不适用于表达式。要获取表达式的实例,请改用 :instances

λ :instances (X [])
instance [safe] Show XList -- Defined at <interactive>:6:10
instance [safe] Show XList -- Defined at <interactive>:6:10