exception Illegal_move of (Board.piece * Board.move)
type status =
    Winner of Board.piece * int * int
  | Resign of Board.piece * int * int
  | Tie of int * int

type playerFun = Board.t -> Board.move option

val play : playerFun -> playerFun -> Board.t -> bool -> status

val randomPlayer : playerFun
val humanPlayer : playerFun
