module Skat where import Card import Control.Monad.State import Control.Monad.Reader import Data.List data SkatEnv = SkatEnv { cards :: [CardS] , turnColour :: Maybe Colour , trumpColour :: Colour , players :: Players } deriving Show type Skat = StateT SkatEnv IO table :: Skat [Card] table = gets cards >>= return . foldr f [] where f (CardS c Table _) cs = c : cs f _ cs = cs tableS :: Skat [CardS] tableS = gets cards >>= return . foldr f [] where f c@(CardS _ Table _) cs = c : cs f _ cs = cs move :: Card -> Space -> Skat () move card sp = do cs <- gets cards let cs' = moveCard card sp cs modify (\env -> env { cards = cs' }) cardsAt :: Space -> Skat [Card] cardsAt sp = gets cards >>= return . findCards sp setTurnColour :: Maybe Colour -> SkatEnv -> SkatEnv setTurnColour col sk = sk { turnColour = col }