有人可以向我解释这个输出吗?我是 Haskell 的新手,不知道为什么会这样。
import Data.Char
o=ord 'f'
main=do print (o==102)
print (mod (102^2087) 9797)
print (mod (o^2087) 9797)
输出:
xxx:~/Arbeitsfläche$ runhaskell st.hs
True
5253
0
GHC 版本 7.4.1,Ubuntu
有人可以向我解释这个输出吗?我是 Haskell 的新手,不知道为什么会这样。
import Data.Char
o=ord 'f'
main=do print (o==102)
print (mod (102^2087) 9797)
print (mod (o^2087) 9797)
输出:
xxx:~/Arbeitsfläche$ runhaskell st.hs
True
5253
0
GHC 版本 7.4.1,Ubuntu
这是因为o
has 类型Int
的范围有限,因此(mod (o^2087) 9797)
也是Int
. 但是,常量102
是通用数值类型 ( Num a => a
) 和(mod (102^2087) 9797)
通用整数类型 ( Integral a => a
)。当这个泛型整数类型必须解析为具体类型时,这发生在应用 时print
,默认解析是选择Integer
无界整数类型。此解决方案的详细信息在Haskell 2010 报告的4.3.4 模糊类型和重载数值运算的默认值部分中进行了描述。