4

と入力すると、「2」が表示されます。しかし、問題は、show 2showが満たすものshow :: Show a => a -> Stringであり、2多形性であるということです。show 2::Intshow 2::Integershow 2::Intshow 2::Integershow 2

(A a)=>show aコンパイラが、Aの現在のすべてのインスタンスがShowであり、同じ結果をもたらすshow a::X場合(A a)=>show a、指定する必要がなく、Aの現在のすべてのインスタンスがShowである場合、異なる結果をもたらす場合を知るのに十分なインテリジェントであると仮定することを拒否します。を指定する必要がありますshow a::X

4

1 に答える 1

14

これはデフォルトのルールによるものです。だからshow 2実際にはshow (2::Integer)これは、セクション4.3.4のhaskell2010レポートで読むことができます。

2番目の質問に答えるために、コンパイラは十分にインテリジェントではありません。タイプのデフォルトが原因で発生します。

確認してもいい

 number = 2

ghciで

*Main> :t number 
 number :: Integer

これで、カスタムのデフォルトの署名

 default (Int)
 number = 2

ghciで

*Main> :t number
number :: Int

私が参照したドキュメントで、タイプがデフォルト可能である場合について読むことができます。

于 2012-12-28T03:52:24.373 に答える