Ath*_*ark 1 haskell types casting type-conversion infinite
Haskell有关联的能力max
和min
价值观与数据类型,但它也有理论上无限数量的工作(如添加1
超过最大Integer
)以预期的方式?什么使Num
类型类如此重要?
Haskell提供了类类来表达数据类型的各种不同属性.
考虑数字数据(Int
,Word
,Double
,Integer
,等).所有这些类型共享一组概念操作:它们可以被添加,相乘,减去,否定等.任何共享这些属性的Num
类型都可以成为类型类的实例.
以某种方式限制的类型由不同的类型类表示:Bounded
.在我的系统中GHCI与只加载默认的模块,我看Bounded
情况为Ordering
,Int
,Char
,和Bool
.Int
受机器字的大小,Char
Unicode标准的界限Bool
以及Ordering
声明的限制所限制.
Double不是Bounded
,因为它能够表达无穷大(因此在概念上是无界的).Integer
也不Bounded
是因为上限不一定是可判定的也不是常数(它受可用内存的限制).尽管如此,这两者仍然能够表达数字类型的属性,所以Num
即使它们不是,它们仍然是Bounded
.
关于溢出,虽然已经证明它Integer
不会溢出,Int
并且Word
(它们Bounded
在内存中的固定宽度表示)将溢出而没有警告或错误.在我的系统上,1 + maxBound :: Int
由于两个补码而溢出到minBound,尽管这不是保证行为.Word
溢出为0,因为它是无符号数据类型.
请记住,Bounded
类型可能不会以"预期的方式"溢出.Haskell规范没有指定Bounded
类型应该如何溢出,因此留给编译器设计者.请注意,这些数据类型的内部表示也未指定,因此不应假设两个补码.实际上,即使a的大小Int
也只能保证为29位.
归档时间: |
|
查看次数: |
277 次 |
最近记录: |