module type Key = sig .. end
type t
include Core.Std.Comparable with type t := t
module type S = sig .. end
type 'a t
type key
val empty : 'a t
val is_empty : 'a t -> bool
val concat : 'a t -> 'a t -> 'a t
val sandwich : 'a t -> key -> 'a -> 'a t -> 'a t
val splay : 'a t -> key -> 'a t * 'a option * 'a t
val splay' : 'a t -> key -> 'a t * (key * 'a) option * 'a t
val delete_min : 'a t -> (key * 'a * 'a t) option
val delete_max : 'a t -> (key * 'a * 'a t) option
val mem : 'a t -> key -> 'a t * bool
val find : 'a t -> key -> 'a t * 'a option
val set : 'a t -> key -> 'a -> 'a t
val delete : 'a t -> key -> 'a t
module Make : 
functor (Key : Key) -> S with type key = Key.t