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