Почему тип Haskell, «производный Integral», должен быть «производным Enum»?

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

5
задан btown 11 April 2012 в 04:28
поделиться