私は最近「Haskellを学ぼう」と試みていますが、(型の安全性とコードの明確さのために)生の整数を使用せずに、整数状態を表す新しい型を作成したいと思います。具体的には、次のコードがコンパイルされます。
newtype AuxState = AuxState Integer
deriving (Eq, Ord, Num, Integral, Real, 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クラスにも強制的に含めるとは信じがたいです。逆にすべきではありませんか?これには理由がありますか、それとも私は何か間違ったことをしている/理解していますか?