functor (Puzzle : PUZZLE) ->
  sig val solve : Puzzle.state -> Puzzle.move list option end