Parece que qualquer instância vinculada deve ter uma implementação sã do Enum. Pessoalmente, não consigo pensar em um contra-exemplo, embora, se alguém criar um que não seja patológico, entenderei por que não é esse o caso.
Ao executar :inas duas classes de tipos, parece que a única exceção atualmente na biblioteca padrão é para tuplas, que são limitadas, mas não enums. No entanto, qualquer tupla limitada também deve ser enumerável de maneira sã, simplesmente incrementando o último elemento e, em seguida, contornando quando se trata de maxBound.
Essa alteração provavelmente envolveria também a adição predBe / nextBou algo parecido a Bounded, para uma maneira segura / em loop de percorrer os valores de Enum. Nesse caso, toEnum 0 :: (...)seria igual a(toEnum 0, toEnum 0, ...) :: (...)
Double/ Floate todos os tipos similares implementados de Enumqualquer maneira, eles apenas produzem succ = (+ 1)e fromEnum = truncate. O jeito de Haskell, na verdade, faz sentido do ponto de vista da praticidade, caso contrário [0, 0,5 ..] e similares não funcionariam, então parece que Haskell não se preocupa com a responsabilidade quando se trata de Enums.
succé (+1). Isso é estranho, porque Doublee Floatnão tem precisão infinita e, portanto, é enumerável - succpoderia ter sido definido como +1 ULP .