gpt4 book ai didi

haskell - Haskell 代码中函数 (toEnum . fromEnum) 的用途是什么?

转载 作者:行者123 更新时间:2023-12-02 02:25:03 25 4
gpt4 key购买 nike

看到函数toEnum . fromEnum用于Char HaskellNet.Network.Auth .

b64Encode :: String -> String
b64Encode = map (toEnum.fromEnum) . B64.encode . map (toEnum.fromEnum)

b64Decode :: String -> String
b64Decode = map (toEnum.fromEnum) . B64.decode . map (toEnum.fromEnum)

乍一看,这个函数应该和 id 相同。 , 正确的?为什么会在这里?

最佳答案

可以等价于id ,但仅在某些情况下。由于fromEnum :: Enum a => a -> Int可以转换任何 EnumInt , 和 toEnum :: Enum a => Int -> a可以转换 Int任何Enum ,因此 toEnum . fromEnum是从任何枚举转换为任何枚举的通用方法,即 (toEnum . fromEnum) :: (Enum a, Enum b) => a -> b .正如您所观察到的,这确实应该与 id 相同。 (如果 Enum 实例已正确实现,即),但仅当您选择 a 时和 b为同一类型;否则,它从一个 Enum 转换实例到不同的 Enum实例。

至于为什么在那个特定的地方使用它:我真的不知道。 B64.decodeB64.encode似乎都是 String -> String , 和 b64Decodeb64Encode也是String -> String , 所以 toEnum . fromEnumChar 转换至Char — 所以在这种情况下,它应该与 id 相同.换句话说,toEnum . fromEnum这里什么都不做,可能应该被删除(尽管我不排除 EnumChar 实例以这样的方式实现而不是 id 的可能性)。

编辑: @K.A.Buhr 在项目的 Git 历史中找到了对此的解释。看来 encodedecode曾经有涉及ByteString的签名, 所以 toEnumfromEnum用于在 Word8 的列表之间进行转换(对于 ByteString )和 Char 的列表(对于 String)。在某个时候encodedecode改用 String而不是 ByteString ,但没有人删除 toEnumfromEnum .

关于haskell - Haskell 代码中函数 (toEnum . fromEnum) 的用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60474175/

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