`succ`如何使用数字文字?

时间:2015-10-03 16:57:09

标签: haskell ghc

λ> succ 5
6
λ> :t succ 5
succ 5 :: (Enum a, Num a) => a

这是如何工作的?由于文字是多态的,被选中的实例是什么?我怀疑它是Integer,但为什么呢?

我的第一个理论是succ的默认实现可能会发挥作用(我不知道为什么会发生这种情况),但是,不,不是这样的情况,因为它不会正常工作:

λ> :t succ (10^20)
succ (10^20) :: (Enum a, Num a) => a
λ> succ (10^20)
100000000000000000001
λ> 
λ> let test = toEnum . (+1) . fromEnum :: Enum a => a -> a
λ> :t test (10^20)
test (10^20) :: (Enum a, Num a) => a
λ> test (10^20)
7766279631452241921

所以,再次,我很确定它是Integer的实例。但为什么呢?

0 个答案:

没有答案