gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 14:24:53 26 4
gpt4 key购买 nike

我不完全理解为什么它工作得很好:

[9223372036854775809..9223372036854775815] :: [Integer]

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

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

如您所见,他们有 Int ,这是有界的。

那么为什么上面的方法有效呢?

澄清:

我的问题的重点是:不是 enumFromTo定义为toEnumfromEnum ?因为这两个只能正常工作 Int s,怎么能enumFromTo (其中 .. 是语法糖)适用于 Integer是吗?

最佳答案

enumFromTo for Integer 不是根据 toEnumfromEnum 定义的,这确实会造成损失正如你提到的那样。您可以阅读implementation here ,它调用 enumDeltaToInteger::Integer -> Integer -> Integer -> [Integer]

instance  Enum Integer  where
succ x = x + 1
pred x = x - 1
toEnum (I# n) = smallInteger n
fromEnum n = I# (integerToInt n)

{-# INLINE enumFrom #-}
{-# INLINE enumFromThen #-}
{-# INLINE enumFromTo #-}
{-# INLINE enumFromThenTo #-}
enumFrom x = enumDeltaInteger x 1
enumFromThen x y = enumDeltaInteger x (y-x)
enumFromTo x lim = enumDeltaToInteger x 1 lim
enumFromThenTo x y lim = enumDeltaToInteger x (y-x) lim

关于haskell - Integer 如何拥有 Enum 的实例? toEnum和fromEnum仅使用Int,这是有限的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35119428/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com