在各种情况下使用minBound时,我尝试了
> minBound :: Int
=> -9223372036854775808
这似乎是合理的。
但是
> abs minBound :: Int
=> -9223372036854775808
这怎么可能? abs x >= 0
不应该假设x :: Int
吗?
这里缺少我对语义的某种理解吗?
答案 0 :(得分:5)
Prelude> minBound :: Int
-9223372036854775808
Prelude> maxBound :: Int
9223372036854775807
请注意,数字9223372036854775808
不能表示为整数。这是two's complement表示形式可能在此处的背景中使用的结果。 minBound
的绝对值不能表示为Int
类型的成员,因此最终会得到一个溢出值。