我最近一直在尝试“向我学习 Haskell”,并且我想创建一个新类型来表示整数状态,而不仅仅是使用原始整数(为了类型安全和代码清晰)。具体来说,编译以下代码:
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 类。不应该反过来吗?这是有原因的,还是我做/理解错了什么?