奇怪的Haskell/GHC输出

Nym*_*mer 3 haskell

有人可以向我解释这个输出吗?我在Haskell全新,不知道为什么会这样.

import Data.Char

o=ord 'f'

main=do print (o==102)
    print (mod (102^2087) 9797)
    print (mod (o^2087) 9797)
Run Code Online (Sandbox Code Playgroud)

输出:

xxx:~/Arbeitsfläche$ runhaskell st.hs
True
5253
0
Run Code Online (Sandbox Code Playgroud)

GHC版本7.4.1,Ubuntu

Geo*_*edy 7

这是因为o具有Int有限范围的类型,因此(mod (o^2087) 9797)也是一种类型Int.但是,常量102是通用数字类型(Num a => a)并且(mod (102^2087) 9797)是通用整数类型(Integral a => a).当必须将此通用整数类型解析为具体类型(在应用时发生)时print,默认解决方案是选择Integer无界积分类型.有关此解决方案的详细信息,请参见4.3.4模糊类型和Haskell 2010报告的重载数值操作默认值.