Недавно я пытался "выучить 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; разве не должно быть наоборот? Есть ли причина для этого, или я делаю/понимаю что-то не так?