sig
  type 'a t
  type key
  val empty : 'Splay_tree.S.t
  val is_empty : 'Splay_tree.S.t -> bool
  val length : 'Splay_tree.S.t -> int
  val keys : 'Splay_tree.S.t -> Splay_tree.S.key list
  val data : 'Splay_tree.S.t -> 'a list
  val to_alist : 'Splay_tree.S.t -> (Splay_tree.S.key * 'a) list
  val mem : 'Splay_tree.S.t -> Splay_tree.S.key -> 'Splay_tree.S.t * bool
  val find :
    'Splay_tree.S.t -> Splay_tree.S.key -> 'Splay_tree.S.t * 'a option
  val set :
    'Splay_tree.S.t -> key:Splay_tree.S.key -> data:'-> 'Splay_tree.S.t
  val delete : 'Splay_tree.S.t -> Splay_tree.S.key -> 'Splay_tree.S.t
  val delete_min :
    'Splay_tree.S.t -> (Splay_tree.S.key * 'a * 'Splay_tree.S.t) option
  val delete_max :
    'Splay_tree.S.t -> (Splay_tree.S.key * 'a * 'Splay_tree.S.t) option
  val delete_after :
    'Splay_tree.S.t ->
    Splay_tree.S.key -> (Splay_tree.S.key * 'a * 'Splay_tree.S.t) option
  val delete_before :
    'Splay_tree.S.t ->
    Splay_tree.S.key -> (Splay_tree.S.key * 'a * 'Splay_tree.S.t) option
  val map : 'Splay_tree.S.t -> f:('-> 'b) -> 'Splay_tree.S.t
  val map_range :
    'Splay_tree.S.t ->
    min_key:Splay_tree.S.key ->
    max_key:Splay_tree.S.key ->
    f:((Splay_tree.S.key * 'a) list -> (Splay_tree.S.key * 'a) list) ->
    'Splay_tree.S.t
  val split :
    'Splay_tree.S.t ->
    Splay_tree.S.key -> 'Splay_tree.S.t * 'a option * 'Splay_tree.S.t
  val t_of_sexp :
    (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'Splay_tree.S.t
  val sexp_of_t :
    ('-> Sexplib.Sexp.t) -> 'Splay_tree.S.t -> Sexplib.Sexp.t
  val key_of_sexp : Sexplib.Sexp.t -> Splay_tree.S.key
  val sexp_of_key : Splay_tree.S.key -> Sexplib.Sexp.t
end