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受机器字的大小,CharUnicode标准的界限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 次 |
| 最近记录: |