数值字面量具有多态类型:
*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
但为什么这是必要的?为什么不推断多态类型?