GHC Haskell的暴露prim包,其中包含装箱值的定义,如Int#,Char#等
Int,Char等等,类型普通的Haskell?一个假设是它们更快,但为什么呢?Mat*_*hid 11
简单来说,类型的值Int可以是未评估的表达式.在您"查看"该值之前,不会计算实际值.
type的值Int#是评估结果.总是.
结果,一个Int生活在堆上的数据结构.An Int#是......只是一个32位整数.它可以存在于CPU寄存器中.您可以使用一台机器指令对其进行操作.它几乎没有开销.
相比之下,当你写,比如说,x + 1你实际上并没有计算 x + 1时,你在堆上创建了一个数据结构,上面写着"当你想要计算它时,做x + 1".
简单地说,Int#速度更快,因为它不能偷懒.
你应该什么时候使用它?几乎从不.这是编译器的工作.这个想法是你编写了很好的高级Haskell代码Int,并且编译器会找出它可以替换Int的地方Int#.(我们希望!)如果没有,那么几乎总是更容易投入一些严格的注释而不是Int#直接玩.(它也是不可移植的;只有GHC使用Int#- 尽管目前还没有其他广泛使用的Haskell编译器.)