type 'a expand_t = 'a -> 'a -> 'a list * bool
+ If [expand] is an expansion function then [(qs, reached) = expand qa qb] is
+ a list of nodes [qs] leading from [qa] towards [qb]. The flag [reached] is
+ [true] if the movement from the last element of [qs] to [qb] is valid;
+ otherwise [reached] is false.
with type q_t := q_t and type value_t = q_t)
val add_root : t -> q_t -> node_t
+ (** Add a root to a search tree.
+ The node [root = add_root s q] is a new root node of [s] containing [q].
val create : ?callback:(t -> unit) -> unit -> t
+ (** Construct a search tree.
+ The search tree [s = create ~callback ()] calls [callback] every time
+ [expand s] is being called.
val create_point : q_t -> t
+ (** Construct a search tree for a point target.
+ The search tree [s = create_point q] contains a single root node with
val create_region : q_t list PaplSampler.t -> t
+ (** Construct a search tree for a region target.
+ The search tree [s = create_region region] samples [region] every time
+ [expand s] is being called and inserts the resulting configurations as
val get_nodes : t -> node_t BatEnum.t
+ (** Enumeration of all nodes of the search tree. *)
module type SETUP_PAIR = sig