Tor*_*nny 4 polymorphism haskell class function show
如果我们输入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)=>show a,A的所有当前实例都是Show,给出不同的结果,我们必须指明show a::X.
Sat*_*vik 14
这是由于违约规则造成的.所以show 2实际上是show (2::Integer).您可以在4.3.4节中的haskell 2010报告中阅读此内容.
要回答第二个问题,编译器不够智能.它是由于类型默认而发生的.
你可以检查一下
number = 2
Run Code Online (Sandbox Code Playgroud)
在ghci
*Main> :t number
number :: Integer
Run Code Online (Sandbox Code Playgroud)
现在您的自定义默认签名
default (Int)
number = 2
Run Code Online (Sandbox Code Playgroud)
在ghci
*Main> :t number
number :: Int
Run Code Online (Sandbox Code Playgroud)
您可以在我引用的文档中了解何时类型可以违约.