有些东西可以在没有订单的情况下枚举.例如:
data Color = Red | Green | Blue deriving Enum
Run Code Online (Sandbox Code Playgroud)
颜色应该有哪些订单?即使颜色可以被提及,也没有固有的顺序.
还有一些事情可以列举,但不能比较平等.例如,浮点数的NaN值不等于任何值.但是,浮点数可以列举.
Enum表示可以映射到整数/从整数映射的类型.这并没有说明如何对这些类型进行排序,只是说你可以用整数来表示它们.
Ord表示有序类型.这与可以映射到整数的类型不同.例如,您不能将任意精度浮点值映射到整数,但您可以对它们进行排序.虽然你在技术上可以尝试将Floats映射到整数,但没有一个心智正常的人会这样做.
至于Eq,Ord需要这个,因为它没有任何意义有一个完全有序的数据类型,它不支持平等.但是,Enum没有必要Eq.由于Enum不提供任何订购保证,它也不提供平等保证.