functor (Key : Key->
  sig
    type 'a t
    type key = Key.t
    val empty : 'a t
    val is_empty : 'a t -> bool
    val concat : 'a t -> 'a t -> 'a t
    val sandwich : 'a t -> key -> '-> '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 t
    val delete : 'a t -> key -> 'a t
  end