sig
  module type OrderedType =
    sig
      type t
      val compare : SkipList.OrderedType.t -> SkipList.OrderedType.t -> int
    end
  module type S =
    sig
      type key
      and 'a t
      val create : ?size:int -> unit -> 'SkipList.S.t
      val clear : 'SkipList.S.t -> unit
      val size : 'SkipList.S.t -> int
      val add : 'SkipList.S.t -> key:SkipList.S.key -> data:'-> unit
      val find : 'SkipList.S.t -> SkipList.S.key -> 'a
      val remove : 'SkipList.S.t -> SkipList.S.key -> unit
      val mem : 'SkipList.S.t -> SkipList.S.key -> bool
      val iter : 'SkipList.S.t -> f:(SkipList.S.key -> '-> unit) -> unit
      val fold :
        'SkipList.S.t ->
        f:(SkipList.S.key -> '-> '-> 'b) -> init:'-> 'b
    end
  module Make :
    functor (Ord : OrderedType->
      sig
        type key = Ord.t
        and 'a t
        val create : ?size:int -> unit -> 'SkipList.S.t
        val clear : 'SkipList.S.t -> unit
        val size : 'SkipList.S.t -> int
        val add : 'SkipList.S.t -> key:SkipList.S.key -> data:'-> unit
        val find : 'SkipList.S.t -> SkipList.S.key -> 'a
        val remove : 'SkipList.S.t -> SkipList.S.key -> unit
        val mem : 'SkipList.S.t -> SkipList.S.key -> bool
        val iter :
          'SkipList.S.t -> f:(SkipList.S.key -> '-> unit) -> unit
        val fold :
          'SkipList.S.t ->
          f:(SkipList.S.key -> '-> '-> 'b) -> init:'-> 'b
      end
end