将fractional的类型设置为num

rod*_*dic 1 haskell typeclass

有人可以解释为什么这个编译

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.

chi*_*chi 5

如果我们有

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类型.

积分文字适合所有数字类型,因此允许使用它们.

  • @rodic是的.从理论上讲,Haskell的设计者可能会强制要求将"1.0"处理为"1",但在实践中,发现在给定的上下文中,"1.0"类型检查但"1.5"确实会非常混乱.不.因此,"1.0"只允许表示"Fractional"类型类中的类型值. (2认同)