module GameEngine.GameActions (
    GameActions(..)
  ) where


import GameEngine.Player
import GameEngine.Move
import GameEngine.GameState


data GameActions a b = GameActions {
    getPlayer  :: GameState a -> Player,
    -- ^ Specifies which player has the move in the state

    getMove    :: GameState a -> Move b,
    -- ^ Returns a legal move in the state

    getResult  :: GameState a -> Move b -> GameState a,
    -- ^ The transition model, which determines the result of a move

    isTerminal :: GameState a -> Bool,
    -- ^ True if game is over, False otherwise

    getScore   :: GameState a -> Player -> Int
    -- ^ A utility function to determine the numeric value for a game that ends in a terminal state
  }
-- ^ Set of actions that defines how the game will be played