How is Int actually defined in Haskell?

若如初见. 提交于 2021-01-26 19:26:20

问题


The Learn You A Haskell for Great Good! book by Miran Lipovača says in the chapter Making Our Own Types and Typeclasses that the idea of Haskell's Int type could be represented like this:

data Int = -2147483648 | -2147483647 | ... | -1 | 0 | 1 | 2 | ... | 2147483647  

Nevertheless, it says that it worked just as demonstrative purposes, but it doesn't say how Int is actually defined. Is Int defined especially by the compiler or can it be definable with plain Haskell code?


回答1:


http://hackage.haskell.org/package/base-4.6.0.1/docs/src/GHC-Int.html#Int8

The above is the sized (and I believe signed) Int datatypes, but the default Int is a built-in.

He's making a point about how algebraic datatypes encode "precise" types that outline what the members of the type are. This is in some respects a step removed from dependent typing but that's another kettle of fish.




回答2:


Int is magic - defined by the compiler. As the other authors have said, it is not actually defined as an algebraic data type, it is implementation-defined, much like Double!

There are some rules though, Int is guaranteed to be at least a 30-bit signed integer. Int must be able to express every value in the range [-2^29, 2^29) (upper bound exclusive). In practice, Int is defined by the compiler to be equivalent to a 32-bit integer value. The reason for this is that Int can be optimized in certain ways that a machine word cannot. Pointer tagging is important for Haskell performance, and so implementations are free to use some number of bits.

If you want guaranteed sized values, Data.Int has Int32, and Data.Word has Word32, which guarantee exact correspondance to 32-bit signed and unsigned machine integers.




回答3:


It could be defined in Haskell by actually defining all 2^32 constructors (which couldn't be called 1, 2 etc. since those aren't legal constructor names) and then defining fromInteger appropriately. However that would not be very practical.

In all real-world implementations Int is a built-in.



来源:https://stackoverflow.com/questions/21959101/how-is-int-actually-defined-in-haskell

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!