如何在 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
我注意到我不知道如何让 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