如果我们输入show 2
,那么我们将得到“2”。但问题是显示满足show :: Show a => a -> String
,并且2
是多态的,如果不幸show 2::Int
与我们不同,show 2::Integer
我们将不得不写show 2::Int
而show 2::Integer
不是简单地写show 2
。
我拒绝假设编译器足够聪明,可以知道(A a)=>show a
A 的所有当前实例何时都属于 Show,给出相同的结果,我们不需要指定show a::X
,以及 A 的所有当前实例何时(A a)=>show a
属于 Show,给出不同的结果,我们必须指定show a::X
.