Ord
1つの型クラスになることができEnum
ますか?なぜEnum
必要ないのですEq
か?
3 に答える
注文なしで列挙できるものがあります。例えば:
data Color = Red | Green | Blue deriving Enum
色はどの順序にする必要がありますか?色を列挙することはできますが、固有の順序はありません。
列挙することはできるが、平等を比較することはできないものもあります。たとえば、フロートのNaN値は何にも等しくありません。ただし、フロートは列挙できます。
Enum
整数に/からマップできるタイプを表します。これは、それらの型がどのようにソートされるべきかについては何も述べておらず、単に整数でそれらを表すことができるということです。
Ord
順序付けられたタイプを表します。これは、整数にマップできるタイプとは異なります。たとえば、任意精度の浮動小数点値を整数にマップすることはできませんが、順序付けすることはできます。技術的にはFloatを整数にマッピングすることはできますが、正しい考えを持っている人は誰もそうしません。
に関しては、等式をサポートしない完全に順序付けられたデータ型を持つことは意味がないためEq
、これが必要です。Ord
ただし、Enum
は必要ありませんEq
。Enum
注文保証はありませんので、平等保証もありません。
これが一般的にどの程度受け入れられているかはわかりませんが、私は常に、用語のシーケンスが任意の用語のペアの「間」にあるような、正規の合計先行予約Enum
(つまり、ループがある可能性がある)を持つ型を記述する型クラスと見なしてきました。有限です(によって目撃されます)。enumFromTo
Ord
一方、は、用語の任意のペア間の要素のセットが有限である必要なしに、正規の全順序を持つタイプを記述します。