Il semble que toute instance Bounded devrait avoir une implémentation saine d'Enum. Je ne peux pas personnellement penser à un contre-exemple, bien que si quelqu'un en trouve un qui n'est pas pathologique, je comprendrai pourquoi ce n'est pas le cas.
En faisant :i
sur les deux classes de caractères, il semble que la seule exception actuellement dans la bibliothèque standard soit pour les tuples, qui sont délimités mais pas les énumérations. Cependant, tout tuple Bounded doit également être énumérable de manière sensée, en incrémentant simplement le dernier élément, puis en bouclant lorsqu'il atteint maxBound.
Ce changement impliquerait probablement également l'ajout predB
et / nextB
ou quelque chose comme ça à Bounded pour un moyen sûr / en boucle de parcourir les valeurs Enum. Dans ce cas, toEnum 0 :: (...)
serait égal à(toEnum 0, toEnum 0, ...) :: (...)
Double
/ Float
et tous les types similaires implémentent de Enum
toute façon, ils font juste succ = (+ 1)
et fromEnum = truncate
. La façon dont Haskell a du sens d'un point de vue pratique, sinon [0, 0,5 ..] et similaire ne fonctionnerait pas, il semble donc que Haskell ne se soucie pas de la comptabilité en ce qui concerne les énumérations.