Parece que cualquier instancia de Bounded debería tener una implementación sensata de Enum. No puedo pensar personalmente en un contraejemplo, aunque si a alguien se le ocurre uno que no sea patológico, entenderé por qué este no es el caso.
Al hacerlo :i
en las dos clases de tipos, parece que la única excepción actualmente en la biblioteca estándar es para las tuplas, que son limitadas pero no enumeraciones. Sin embargo, cualquier tupla limitada también debe ser enumerable de una manera sensata, simplemente incrementando el último elemento y luego envolviéndolo cuando llegue a maxBound.
Este cambio probablemente también implicaría agregar predB
y / nextB
o algo así a Bounded para una forma segura / en bucle para atravesar los valores de Enum. En este caso toEnum 0 :: (...)
sería igual a(toEnum 0, toEnum 0, ...) :: (...)
Double
/ Float
y todos los tipos similares se implementan de Enum
todos modos, solo hacen succ = (+ 1)
y fromEnum = truncate
. El camino de Haskell realmente tiene sentido desde una perspectiva práctica, ya que de lo contrario [0, 0.5 ...] y similares no funcionarían, por lo que parece que a Haskell no le preocupa la contabilidad cuando se trata de Enums.