( phaul | 2015. 01. 21., sze – 10:18 )

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.