-- | A player is either player 1 or player 2 /(isomorphic to Bool)/. module Data.TicTacToe.Player ( Player -- * Reduction , player -- * Construction , player1 , player2 -- * Decisions , isPlayer1 , isPlayer2 -- * Combinator , alternate , toSymbol ) where -- | A player. data Player = Player1 | Player2 deriving (Eq, Ord, Enum) instance Show Player where show Player1 = "Player 1" show Player2 = "Player 2" -- | Returns whether or not the player is player 1. isPlayer1 :: Player -> Bool isPlayer1 Player1 = True isPlayer1 Player2 = False -- | Returns whether or not the player is player 2. isPlayer2 :: Player -> Bool isPlayer2 = not . isPlayer1 -- | Player 1. player1 :: Player player1 = Player1 -- | Player 2. player2 :: Player player2 = Player2 -- | Folds a player. player :: x -- ^ If player 1. -> x -- ^ If player 2. -> Player -- ^ The player to fold. -> x player x _ Player1 = x player _ x Player2 = x -- | Switches a player from player 1 to player 2 or vice versa. alternate :: Player -- ^ The player to alternate. -> Player alternate Player1 = Player2 alternate Player2 = Player1 -- | Returns a character symbol denoting each player. toSymbol :: Player -> Char toSymbol = player 'X' 'O'