module Cartes where import Data.Set as Set data ValeurCouleur = As | Deux | Trois | Quatre | Cinq | Six | Sept | Huit | Neuf | Dix | Valet | Cavalier | Dame | Roi deriving (Eq, Ord, Show) data Couleur = Pique | Coeur | Carreau | Trefle deriving (Eq, Show, Ord) data Carte = Valeur (ValeurCouleur, Couleur) | Atout Int | Excuse deriving (Eq, Ord) instance Show Carte where show (Excuse) = "Excuse" show (Atout n) = (show n) ++ " d'atout" show (Valeur (n,c)) = (show n) ++ " de " ++ (show c) allValeurs = [As, Deux, Trois, Quatre, Cinq, Six, Sept, Huit, Neuf, Dix, Valet, Cavalier, Dame, Roi] allCouleurs = [Pique, Coeur, Carreau, Trefle] deck :: Set Carte deck = fromList ([Valeur (n,c) | n<-allValeurs, c<-allCouleurs] ++ [Atout n | n<-[1..21]] ++ [Excuse]) -------------------------------------- ------------- List Utils ------------- -------------------------------------- replaceNth :: [a] -> Int -> a -> [a] replaceNth (e:s) i newElement | i==0 = newElement:s | otherwise = replaceNth s (i-1) newElement toPentuple :: [a] -> (a,a,a,a,a) toPentuple [j1,j2,j3,j4,j5] = (j1,j2,j3,j4,j5) fst5 :: (a,b,c,d,e) -> a fst5 (x,y,z,t,u) = x snd5 :: (a,b,c,d,e) -> b snd5 (x,y,z,t,u) = y thr5 :: (a,b,c,d,e) -> c thr5 (x,y,z,t,u) = z frh5 :: (a,b,c,d,e) -> d frh5 (x,y,z,t,u) = t fih5 :: (a,b,c,d,e) -> e fih5 (x,y,z,t,u) = u