有人可以解释为什么这个编译
Prelude> 1 :: Num a => a
Run Code Online (Sandbox Code Playgroud)
而这不是
Prelude> 1.0 :: Num a => a
Run Code Online (Sandbox Code Playgroud)
第二个例子可以使用Fractional,但是Num是超类Fractional.就像它的超类一样Integral.
如果我们有
x :: Num a => a
Run Code Online (Sandbox Code Playgroud)
x可以选择a想要的用户.例如
x :: Int
Run Code Online (Sandbox Code Playgroud)
如果这会评估什么x = 1.5?
由于这个原因,浮点文字不能被赋予多类型Num a => a,因为它的值(通常)不适合所有的Numeric类型.
积分文字适合所有数字类型,因此允许使用它们.