Схоже, що будь-який обмежений екземпляр повинен мати розумну реалізацію Enum. Я особисто не можу придумати контрприклад, хоча якщо хтось придумає той, який не є патологічним, то я зрозумію, чому це не так.
З того, що робити :i
на двох класах типових класів, здається, єдиним винятком, який зараз є у стандартній бібліотеці, є кортежі, які є Bounded, але не Enums. Однак будь-який обмежений кортеж також повинен бути численним у розумному вигляді, просто збільшуючи останній елемент, а потім обертаючись, коли він дістається до maxBound.
Ця зміна, ймовірно, також передбачає додавання predB
та nextB
чимось подібне до Обмеженого для безпечного / циклічного способу проходу через значення Enum. У цьому випадку toEnum 0 :: (...)
було б дорівнює(toEnum 0, toEnum 0, ...) :: (...)
Double
/ Float
і всі подібні типи впроваджують Enum
все одно, вони просто роблять succ = (+ 1)
і fromEnum = truncate
. Шлях Haskell насправді має сенс з точки зору практичності, оскільки в іншому випадку [0, 0,5 ..] і подібні не спрацювали, тому, схоже, Haskell не переживає про підрахунок, коли мова йде про Enums.