10

可以Ord并且Enum是一个类型类吗?为什么Enum不需要Eq

4

3 回答 3

11

有些东西可以不按顺序列举。例如:

data Color = Red | Green | Blue deriving Enum

颜色应该有什么顺序?没有固有的顺序,即使颜色可以枚举。

还有一些事情可以列举但不能比较是否相等。例如,浮点数的 NaN 值不等于任何值。但是,可以枚举浮点数。

于 2012-07-15T21:41:27.973 回答
9

Enum表示可以映射到整数的类型。这并没有说明这些类型应该如何排序,只是你可以用整数表示它们。

Ord表示有序类型。这与可以映射到整数的类型不同。例如,您不能将任意精度的浮点值映射到整数,但您可以对它们进行排序。虽然您在技术上可以尝试将浮点数映射到整数,但没有人会这样做。

至于Eq,Ord需要这个,因为拥有一个不支持相等的完全有序的数据类型是没有意义的。但是,Enum没有必要Eq。由于Enum不提供任何排序​​保证,它也不提供平等保证。

于 2012-07-15T21:41:22.660 回答
2

虽然我不确定这在多大程度上被普遍接受,但我一直将其视为Enum描述具有规范总预排序(即可能存在循环)的类型的类型类,因此术语序列“介于”任何一对术语之间是有限的(由 见证enumFromTo)。

Ord另一方面,描述具有规范总阶的类型,而不要求任何一对项之间的元素集是有限的。

于 2012-07-15T22:05:43.407 回答