Sembra che ogni istanza rilegata dovrebbe avere un'implementazione sana di Enum. Non riesco a pensare personalmente a un controesempio, anche se se qualcuno ne trova uno che non è patologico, capirò perché non è così.
Dal fare :i
sui due caratteri tipografici sembra che l'unica eccezione attualmente nella libreria standard sia per le tuple, che sono limitate ma non Enum. Tuttavia, qualsiasi tupla legata deve anche essere enumerabile in modo sano, semplicemente incrementando l'ultimo elemento e poi avvolgendosi quando arriva a maxBound.
Questo cambiamento sarebbe probabilmente coinvolgere anche aggiungere predB
e nextB
o qualcosa di simile ad Delimitata per una cassetta di sicurezza / loop modo di attraversare attraverso i valori Enum. In questo caso toEnum 0 :: (...)
sarebbe uguale a(toEnum 0, toEnum 0, ...) :: (...)
Double
/ Float
e tutti i tipi simili implementano Enum
comunque, semplicemente fanno succ = (+ 1)
e fromEnum = truncate
. Il modo di Haskell ha davvero senso dal punto di vista della praticità, altrimenti [0, 0,5 ..] e simili non funzionerebbero, quindi sembra che Haskell non si preoccupi della numerabilità quando si tratta di Enums.