我正在阅读Haskell 中的编程书籍并测试 GHCi 解释器中提供的示例。事实证明,Int
GHCi 和 Hugs 解释器的类型行为存在差异。根据“Haskel 编程”的第 3 章,2^31 :: Int
应该超出Int
类型的范围。同时,在 GHCi 解释器中,我得到:
Prelude> 2^31 :: Int
2147483648
而在 Hugs 中,它的行为就像书中所说:
Hugs> 2^31 :: Int
-2147483648
在 GHCi 中,我什至可以检查结果是否为Int
Prelude> let x = 2^31 :: Int
Prelude> :type x
x :: Int
Prelude> x
2147483648
所描述的差异的根源是什么?我应该在 Hugs 中运行书中的示例还是使用 GHCi,这似乎是学习 Haskell 的推荐选择?我会很感激你的帮助。