数値リテラルにはポリモーフィック型があります。
*Main> :t 3
3 :: (Num t) => t
しかし、変数をそのようなリテラルにバインドすると、ポリモーフィズムは失われます。
x = 3
...
*Main> :t x
x :: Integer
一方、関数を定義すると、もちろん多形になります。
f x = 3
...
*Main> :t f
f :: (Num t1) => t -> t1
型署名を提供して、x
残差が多形であることを確認できます。
x :: Num a => a
x = 3
...
*Main> :t x
x :: (Num a) => a
しかし、なぜこれが必要なのですか?ポリモーフィック型が推測されないのはなぜですか?