可以Ord
并且Enum
是一个类型类吗?为什么Enum
不需要Eq
?
问问题
1600 次
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 回答