Wygląda na to, że każda instancja Bounded powinna mieć rozsądną implementację Enum. Nie mogę osobiście wymyślić kontrprzykładu, chociaż jeśli ktoś wymyśli taki, który nie jest patologiczny, zrozumiem, dlaczego tak nie jest.
Z robienia :i
na dwóch typach klas wydaje się, że jedynym wyjątkiem obecnie w standardowej bibliotece są krotki, które są ograniczone, ale nie wyliczają. Jednak każda krotka Bounded musi być również wyliczalna w rozsądny sposób, po prostu zwiększając ostatni element, a następnie zawijając, gdy dojdzie do maxBound.
Ta zmiana prawdopodobnie wymagałaby również dodania predB
i / nextB
lub czegoś takiego do Bounded w celu bezpiecznego / zapętlonego sposobu przechodzenia przez wartości Enum. W takim przypadku toEnum 0 :: (...)
byłoby równe(toEnum 0, toEnum 0, ...) :: (...)
Double
/ Float
i wszystkie podobne typy i Enum
tak implementują , po prostu tworzą succ = (+ 1)
i fromEnum = truncate
. Sposób Haskella ma sens z praktycznego punktu widzenia, ponieważ w przeciwnym razie [0, 0,5 ..] i podobne nie działałyby, więc wydaje się, że Haskell nie martwi się o policzalność, jeśli chodzi o Enums.