functor (L : OrderedType) (R : OrderedType->
  sig
    type t
    type left = L.t
    type right = R.t
    val empty : t
    val is_empty : t -> bool
    val add : t -> left -> right -> t
    val remove : t -> left -> right -> t
    val cardinal_left : t -> int
    val cardinal_right : t -> int
    val remove_left : t -> left -> t
    val remove_right : t -> right -> t
    val mem_left : t -> left -> bool
    val mem_right : t -> right -> bool
    val find_left : t -> left -> right sequence
    val find_right : t -> right -> left sequence
    val find1_left : t -> left -> right option
    val find1_right : t -> right -> left option
    val fold : ('-> left -> right -> 'a) -> '-> t -> 'a
    val pairs : t -> (left * right) sequence
    val add_pairs : t -> (left * right) sequence -> t
    val seq_left : t -> left sequence
    val seq_right : t -> right sequence
  end