在GHCi中,我输入:
let xs = [1, 'a']
它会立即报错:
<interactive>:28:11:
No instance for (Num Char) arising from the literal ‘1’
In the expression: 1
In the expression: [1, 'a']
In an equation for ‘xs’: xs = [1, 'a']
然而,当我输入
let xs = [1, [1, 1]]
刚才已经通过了。但是当我尝试打印xs时出现错误提示:
<interactive>:5:1:
No instance for (Num [t0]) arising from a use of ‘it’
In a stmt of an interactive GHCi command: print it
我认为Haskell是一种静态类型语言,因此任何类型错误都应该在编译时捕获。我想知道为什么上述两个错误在不同的时间被捕获?
Enum Char
实例定义一个Num Char
实例。同样的推理也适用,但此处未包含该实例。 - Jeremy ListNum [a]
(对于Num Char
也是如此),而是因为(使用FlexibleInstances)可能存在一些特定的实例,例如Num [Double]
,然后您可以将xs
用作类型[[Double]]
。换句话说,GHC还不知道要尝试解决什么约束条件。 - Reid Barton