sig
  type t
  type elt
  type cursor
  type 'a result
  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