{-# LANGUAGE ExistentialQuantification #-} module Player where import Card import Pile class Player p where team :: p -> Team hand :: p -> Hand chooseCard :: p -> Colour -> Maybe Colour -> [Card] -> Card data Stupid = Stupid { getTeam :: Team , getHand :: Hand } deriving Show instance Player Stupid where team = getTeam hand = getHand chooseCard p trumpCol turnCol hand = head possible where possible = filter (isAllowed trumpCol turnCol hand) hand data PL = forall p. (Show p, Player p) => PL p instance Show PL where show (PL p) = show p instance Player PL where team (PL p) = team p hand (PL p) = hand p chooseCard (PL p) = chooseCard p data Players = Players PL PL PL deriving Show player :: Players -> Hand -> PL player (Players p _ _) Hand1 = p player (Players _ p _) Hand2 = p player (Players _ _ p) Hand3 = p --playersFromTable :: Players -> [CardS] -> [Player] --playersFromTable ps = map (player ps . playerOfHand . getOwner)