相关疑难解决方法(0)

为什么在Haskell中没有推断出多态值?

数字文字具有多态类型:

*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

21
推荐指数
2
解决办法
1294
查看次数