4
import Data.Dynamic

default(Integer,Double)

a :: Num a => a
a = 5

-- show :: Show a => a -> String
-- toDyn :: Typeable a => a -> Dynamic

main :: IO ()
-- main = print $ show a -- *** THIS LINE WORKS WELL
main = print $ toDyn a   -- *** THIS LINE LEADS TO AN AMBIGUOUS TYPE ERROR

最初の「メイン」バージョンが機能し、2番目のバージョンが機能しない理由がわかりません。私を助けてくれる人はいますか?お返事ありがとうございます。

4

1 に答える 1

4

Haskellレポートから:

あいまいな型が発見された状況では、次の場合にあいまいな型変数vがデフォルトになります。

  • vは、 C vの形式の制約でのみ表示されます。ここで、Cはクラスであり、
  • これらのクラスの少なくとも1つは、数値クラス(つまり、NumまたはのサブクラスNum)、および
  • これらのクラスはすべて、プレリュードまたは標準ライブラリで定義されています

Showとは異なり、Typeable3番目のポイントで指定されたクラスの1つではないため、例は失敗します。したがって、デフォルト設定は実行されません。

于 2012-08-25T09:30:02.150 に答える