Enum represents types that can be mapped to / from integers. It says nothing about how to sort these types, just so you can represent them with integers.
Ord is an ordered type. This is different from types that can be matched to integers. For example, you cannot match arbitrary precision floating point values ββwith integers, but you can order them. And while you can technically try to match Floats with integers, no one in their right mind will do this.
As for Eq , Ord requires this because it makes no sense to have a fully ordered data type that does not support equality. However, Enum does not need Eq . Since Enum does not provide any guarantee of the order, it also does not guarantee equality guarantees.
Kevin ballard
source share