10

Ord1つの型クラスになることができEnumますか?なぜEnum必要ないのですEqか?

4

3 に答える 3

11

注文なしで列挙できるものがあります。例えば:

data Color = Red | Green | Blue deriving Enum

色はどの順序にする必要がありますか?色を列挙することはできますが、固有の順序はありません。

列挙することはできるが、平等を比較することはできないものもあります。たとえば、フロートのNaN値は何にも等しくありません。ただし、フロートは列挙できます。

于 2012-07-15T21:41:27.973 に答える
9

Enum整数に/からマップできるタイプを表します。これは、それらの型がどのようにソートされるべきかについては何も述べておらず、単に整数でそれらを表すことができるということです。

Ord順序付けられたタイプを表します。これは、整数にマップできるタイプとは異なります。たとえば、任意精度の浮動小数点値を整数にマップすることはできませんが、順序付けすることはできます。技術的にはFloatを整数にマッピングすることはできますが、正しい考えを持っている人は誰もそうしません。

に関しては、等式をサポートしない完全に順序付けられたデータ型を持つことは意味がないためEq、これが必要です。Ordただし、Enumは必要ありませんEqEnum注文保証はありませんので、平等保証もありません。

于 2012-07-15T21:41:22.660 に答える
2

これが一般的にどの程度受け入れられているかはわかりませんが、私は常に、用語のシーケンスが任意の用語のペアの「間」にあるような、正規の合計先行予約Enum(つまり、ループがある可能性がある)を持つ型を記述する型クラスと見なしてきました。有限です(によって目撃されます)。enumFromTo

Ord一方、は、用語の任意のペア間の要素のセットが有限である必要なしに、正規の全順序を持つタイプを記述します。

于 2012-07-15T22:05:43.407 に答える