Ord和Enum有时在Haskell中不兼容吗?

L01*_*man 8 haskell typeclass

莫非OrdEnum是一个类型类的?为什么Enum不需要Eq

dfl*_*str 9

有些东西可以在没有订单的情况下枚举.例如:

data Color = Red | Green | Blue deriving Enum
Run Code Online (Sandbox Code Playgroud)

颜色应该有哪些订单?即使颜色可以被提及,也没有固有的顺序.

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

  • 为什么订单不是简单的顺序?所以`比较Red Green`是`LT`,`比较Green Blue`是`LT`. (3认同)

Lil*_*ard 7

Enum表示可以映射到整数/从整数映射的类型.这并没有说明如何对这些类型进行排序,只是说你可以用整数来表示它们.

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

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