functor (Puzzle : PUZZLE) ->
  sig val run : Puzzle.state -> Puzzle.move list -> unit end