Кажется, что у любого ограниченного экземпляра должна быть нормальная реализация Enum. Лично я не могу придумать контрпример, хотя, если кто-то придумает такой, который не является патологическим, я пойму, почему это не так.
Из :i
этих двух классов типов кажется, что единственное исключение в стандартной библиотеке в настоящее время относится к кортежам, которые являются ограниченными, но не перечислимыми. Однако любой ограниченный кортеж также должен быть вменяемым Enumerable, просто увеличивая последний элемент, а затем оборачиваясь, когда он достигает maxBound.
Это изменение, вероятно, также будет включать добавление predB
и nextB
или что-то в этом роде в Bounded для безопасного / циклического способа обхода значений Enum. В этом случае toEnum 0 :: (...)
будет равно(toEnum 0, toEnum 0, ...) :: (...)
Double
/ Float
и все подобные типы реализуются в Enum
любом случае, они просто создают succ = (+ 1)
и fromEnum = truncate
. Путь Haskell действительно имеет смысл с точки зрения практичности, так как в противном случае [0, 0.5 ..] и тому подобное не сработает, поэтому, похоже, Haskell не беспокоится о счетности, когда дело доходит до Enums.