Maga a konstruktor nem lesz folsorolhato mert http://hackage.haskell.org/package/base-4.7.0.2/docs/Prelude.html#t:Enum
class Enum a where
fromEnum :: a -> Int -- fuggveny a problemas. (a toEnum az definialhato lenne).
Megpedig azert mert ha a :: Rank -> Card akkor a fromEnum :: (Rank -> Card) -> Int viszont fv-re nem lehet pattern matchelni. (ill fv-eken nincs Eq sem). Tehat nem tudsz olyat irni, hogy
fromEnum Clubs = ...
fromEnum Hearts = ...
Viszont a Card az lehet enum
cards = [f r | f <- [Clubs, Hearts, Diamonds, Spades], r <- [Ten .. King]] ++ [Tarrock v | v <- [I .. Skeench]]
instance Enum Card where
toEnum n = cards !! n
fromEnum c = fromJust $ elemIndex c cards
es akkor [Clubs Ten .. Tarrock Skeench]. (az elemIndex miatt kell szarmaztatni egy Eq instance-t is mindenhol vagy pattern match-el imlementalni a fromEnum-ot.)
viszont igy az enum osszes trukkje is mukodik: [ Clubs Ten .. Clubs King ], es most csak a Ten-ek: [Clubs Ten, Hearts Ten .. Spades Ten] vagy akar visszafele.