sig
module type PUZZLE =
sig
type state
type move
val apply :
Solver.PUZZLE.state -> Solver.PUZZLE.move -> Solver.PUZZLE.state
val moves : Solver.PUZZLE.state -> Solver.PUZZLE.move list
val is_goal : Solver.PUZZLE.state -> bool
val equal : Solver.PUZZLE.state -> Solver.PUZZLE.state -> bool
val goodness : Solver.PUZZLE.state Util.comparator
end
module type S =
functor (Puzzle : PUZZLE) ->
sig val solve : Puzzle.state -> Puzzle.move list option end
module MakeUnguided : S
module Make : S
end