Es scheint, dass jede Bounded-Instanz eine vernünftige Implementierung von Enum haben sollte. Ich kann mir kein Gegenbeispiel vorstellen, obwohl ich verstehen werde, warum dies nicht der Fall ist, wenn jemand eines findet, das nicht pathologisch ist.
Ausgehend :i
von den beiden Typklassen scheint die einzige Ausnahme, die derzeit in der Standardbibliothek enthalten ist, Tupel zu sein, die begrenzt, aber keine Aufzählungen sind. Jedes Bounded-Tupel muss jedoch auch auf vernünftige Weise aufzählbar sein, indem einfach das letzte Element inkrementiert und dann umbrochen wird, wenn es zu maxBound gelangt.
Diese Änderung würde wahrscheinlich auch das Hinzufügen predB
und / nextB
oder ähnliches zu Bounded beinhalten, um einen sicheren / schleifenförmigen Weg zum Durchlaufen der Enum-Werte zu finden. In diesem Fall toEnum 0 :: (...)
wäre gleich(toEnum 0, toEnum 0, ...) :: (...)
Double
/ Float
und alle ähnlichen Typen implementieren sie Enum
trotzdem, sie machen nur succ = (+ 1)
und fromEnum = truncate
. Haskells Weg ist aus praktischer Sicht tatsächlich sinnvoll, da sonst [0, 0,5 ..] und ähnliches nicht funktionieren würden. Haskell scheint sich also keine Sorgen um die Zählbarkeit zu machen, wenn es um Enums geht.