数字文字具有多态类型:
*Main> :t 3
3 :: (Num t) => t
Run Code Online (Sandbox Code Playgroud)
但是,如果我将变量绑定到这样的文字,则多态性将丢失:
x = 3
...
*Main> :t x
x :: Integer
Run Code Online (Sandbox Code Playgroud)
另一方面,如果我定义一个函数,它当然是多态的:
f x = 3
...
*Main> :t f
f :: (Num t1) => t -> t1
Run Code Online (Sandbox Code Playgroud)
我可以提供一个类型签名,以确保x遗骸多态:
x :: Num a => a
x = 3
...
*Main> :t x
x :: (Num a) => a
Run Code Online (Sandbox Code Playgroud)
但为什么这有必要呢?为什么不推断出多态类型?
polymorphism haskell type-inference monomorphism-restriction