sig
module type PUZZLE =
sig
type state
type move
val apply : state -> move -> state
val moves : state -> move list
val is_goal : state -> bool
val equal : state -> state -> bool
val goodness : state Util.comparator
type animstate
val init : state -> Animation.PUZZLE.animstate
val render :
Animation.PUZZLE.animstate -> state -> (float * move) option -> unit
end
module Make :
functor (Puzzle : PUZZLE) ->
sig val run : Puzzle.state -> Puzzle.move list -> unit end
end