我不完全理解为什么这样可行:
[9223372036854775809..9223372036854775815] :: [Integer]
这些是大于maxBound :: Int
的整数。然而,这些是两个关键Enum
函数的类型签名:
toEnum :: Int -> a
fromEnum :: a -> Int
正如您所看到的,他们有Int
,这是有限的。
那为什么上面的工作呢?
澄清:
我的问题是:Isn' t enumFromTo
是根据toEnum
和fromEnum
定义的吗?由于这两者仅适用于常规Int
,enumFromTo
(..
是一个语法糖)如何为Integer
s工作?
答案 0 :(得分:8)
enumFromTo
的{{1}}未定义Integer
和toEnum
,这确实会导致代表性丢失,如您所述。您可以阅读implementation here,其中会调用fromEnum
。
enumDeltaToInteger :: Integer -> Integer -> Integer -> [Integer]