sig
  module type Game =
    sig
      type gameField
      type move
      val get_moves : Minimax.Game.gameField -> Minimax.Game.move list
      val make_move :
        Minimax.Game.move -> Minimax.Game.gameField -> Minimax.Game.gameField
      val is_endpos : Minimax.Game.gameField -> bool
    end
  module type M =
    sig
      type gameField
      type move
      val byDepth :
        (Minimax.M.gameField -> float) ->
        int -> Minimax.M.gameField -> Minimax.M.move
      val byTime :
        (Minimax.M.gameField -> float) ->
        float -> Minimax.M.gameField -> Minimax.M.move
      val byNodes :
        (Minimax.M.gameField -> float) ->
        int -> Minimax.M.gameField -> Minimax.M.move
    end
  module Make :
    functor (G : Game->
      sig
        type gameField = G.gameField
        type move = G.move
        val byDepth : (gameField -> float) -> int -> gameField -> move
        val byTime : (gameField -> float) -> float -> gameField -> move
        val byNodes : (gameField -> float) -> int -> gameField -> move
      end
end