gpt4 book ai didi

haskell - 为什么 Haskell 类型 "deriving Integral"需要是 "deriving Enum"?

转载 作者:行者123 更新时间:2023-12-03 14:31:38 27 4
gpt4 key购买 nike

我最近一直在尝试“向我学习 Haskell”,我想创建一个新类型来表示整数状态,而不仅仅是使用原始 Integer(为了类型安全和代码清晰)。具体来说,以下代码编译:

newtype AuxState = AuxState Integer
deriving (Eq, Ord, Num, Integral, Real, Enum)

但是,由于我的应用程序中有无数个状态,因此我没有兴趣将这种状态转换为 Enum。但是,如果我尝试删除 deriving (Enum)声明所以它只是 deriving (Eq, Ord, Num, Integral, Real) ,编译器提示:
No instance for (Enum AuxState)
arising from the 'deriving' clause of a data type declaration
Possible fix:
add an instance declaration for (Enum AuxState)
or use a standalone 'deriving instance' declaration,
so you can specify the instance context yourself
When deriving the instance for (Integral AuxState)

我发现很难相信 Haskell 强制 Integral 类中的类型也属于 Enum 类;不应该是相反的吗?这有什么原因吗,或者我做错了什么/理解错了吗?

最佳答案

全部 Integral一定是Enum因为Integral的基础数学是 succpred操作。 (从技术上讲 Enum 代表正确的类型层次结构,其中 Integral 类型是数学半群,我认为。)反过来似乎更错误:你的意思是每个 Enum应该是 Integral ?这是否包括随机 ADT,如

data Foo = A | B | C | D | E | F | G deriving (Enum)

?

(每个 Enum 都应该同构于 Integral 的子集,当然,但这实际上表明它走向另一个方向: Integral 可以代表任何 Enum 但反之亦然,所以 Integral 是一种你- Enum。)

关于haskell - 为什么 Haskell 类型 "deriving Integral"需要是 "deriving Enum"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10099808/

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