我正在使用GHC作为库编写Haskell到Javascript代码生成器.由于Javascript没有整数类型,并且其Number类型只能正确表示高达2⁵3的整数,我将整数表示为数字,明确地执行所有算术模2¾.这对于32位GHC非常有效,但对于64位版本则更差.
GHC很乐意将Int64值强制转换为Ints,并将Int常量解释为64位值(例如,0xffffffff变为4294967295而不是-1),这会导致各种恼人的问题.
即使在64位系统上,编译器也能很好地处理"普通"Web内容,前提是标准库是在32位机器上构建的,但"请不要使用大数字,好吗?" 不是你想在编译器手册中看到的东西.一些问题(但不是全部)可以通过使用-O0进行编译来缓解,但是(不出所料)产生的代码不仅速度慢,而且太大.
所以,我需要阻止GHC假设Int和Int64是等价的.这甚至可能吗?