functor
  (S : sig
         type t
         type elt
         type cursor
         type 'a result = 'a
         type 'a elt_ = elt
         type 'a set = t
         type ('a, 'b) result_ = 'a result
         val empty : 'a set
         val is_empty : 'a set -> bool
         val mem : 'a elt_ -> 'a set -> (bool, 'a) result_
         val add : 'a elt_ -> 'a set -> 'a set
         val singleton : 'a elt_ -> 'a set
         val remove : 'a elt_ -> 'a set -> 'a set
         val min_elt : 'a set -> ('a elt_, 'a) result_
         val max_elt : 'a set -> ('a elt_, 'a) result_
         val choose : 'a set -> ('a elt_, 'a) result_
         val cardinal : 'a set -> int
         val compare : 'a set -> 'a set -> int
         val equal : 'a set -> 'a set -> bool
         val iter : ('a elt_ -> unit) -> 'a set -> unit
         val fold : ('-> 'b elt_ -> 'a) -> '-> 'b set -> 'a
         val union : 'a set -> 'a set -> 'a set
         val inter : 'a set -> 'a set -> 'a set
         val diff : 'a set -> 'a set -> 'a set
         val gen1 :
           (?size:int -> Random.State.t -> 'a elt_) ->
           ?size:int -> Random.State.t -> 'a set
         val well_formed : 'a set -> bool
         val of_result : ('a, 'b) result_ -> 'a
         type 'a cursor_ = cursor
         val to_cursor : 'a set -> 'a cursor_
         val from_cursor : 'a cursor_ -> 'a set
         val at_top : 'a cursor_ -> bool
         val at_left : 'a cursor_ -> bool
         val at_right : 'a cursor_ -> bool
         val move_up : 'a cursor_ -> 'a cursor_
         val move_down_left : 'a cursor_ -> 'a cursor_
         val move_down_right : 'a cursor_ -> 'a cursor_
         val went_left : 'a cursor_ -> bool
         val went_right : 'a cursor_ -> bool
         val has_value : 'a cursor_ -> bool
         val get_value : 'a cursor_ -> 'a elt_
         val to_string : 'a set -> string
         val gen : ?size:int -> Random.State.t -> t
       end->
  sig
    val benchmark :
      ((S.elt, Dug.Id.t) generator, (S.elt, Dug.Id.t) mutator,
       (S.elt, Dug.Id.t) observer)
      Reins.Dug.t -> float
  end