Integer如何拥有Enum的实例? toEnum和fromEnum只使用Int,这是有限的

时间:2016-01-31 21:02:02

标签: haskell

我不完全理解为什么这样可行:

[9223372036854775809..9223372036854775815] :: [Integer]

这些是大于maxBound :: Int的整数。然而,这些是两个关键Enum函数的类型签名:

toEnum :: Int -> a
fromEnum :: a -> Int

正如您所看到的,他们有Int,这是有限的。

那为什么上面的工作呢?

澄清:

我的问题是:Isn' t enumFromTo是根据toEnumfromEnum定义的吗?由于这两者仅适用于常规IntenumFromTo..是一个语法糖)如何为Integer s工作?

1 个答案:

答案 0 :(得分:8)

enumFromTo的{​​{1}}未定义IntegertoEnum,这确实会导致代表性丢失,如您所述。您可以阅读implementation here,其中会调用fromEnum

enumDeltaToInteger :: Integer -> Integer -> Integer -> [Integer]