{-# OPTIONS_HADDOCK ignore-exports #-} module Game ( Player(Adam,Eve), Game(initial,player,moves), flipPlayer, solve, play, Moves, Solution ) where -- | Le type des données des joueur data Player = Adam | Eve deriving (Eq,Ord,Show) -- | Le type des données des coups type Moves a = [a] -- | un jeu est identifié à l'enesmble de ses positions (le type a) -- avec les methodes de la classe Game class Game a where -- | la position intiale du jeu a initial :: a -- | le joueur qui doit choisir un coup, dans une position donnée player :: a -> Player -- | les coups possibles, à partir d'une position donnée moves :: a -> Moves a -- | l'autre joueur flipPlayer :: Player -> Player flipPlayer Adam = Eve flipPlayer _ = Adam -- | le type des solution. -- Une solution est une fonction (partielle) -- qui associe à chaque position le joueur qui possède une stratégie gagnante -- depuis cette position -- ici, une telle fonction partielle est realisée come une liste associative type Solution a = [(a,Player)] -- | resoure un jeu solve :: (Game a,Ord a) => a -> Solution a solve position = [] -- | joueur une jeu play :: (Game a,Ord a,Show a) => a -> IO () play position = let solution = solve position in return ()