functor (Ord : Datatype.S->
  functor (Value : Value->
    sig
      type key = Ord.t
      type value = Value.t
      type rangemap
      type t = rangemap
      val ty : t Type.t
      val name : string
      val descr : t Descr.t
      val packed_descr : Structural_descr.pack
      val reprs : t list
      val equal : t -> t -> bool
      val compare : t -> t -> int
      val hash : t -> int
      val pretty_code : Format.formatter -> t -> unit
      val internal_pretty_code :
        Type.precedence -> Format.formatter -> t -> unit
      val pretty : Format.formatter -> t -> unit
      val varname : t -> string
      val mem_project : (Project_skeleton.t -> bool) -> t -> bool
      val copy : t -> t
      val create : t -> key -> value -> t -> t
      val empty : t
      val is_empty : t -> bool
      val add : key -> value -> t -> t
      val singleton : key -> value -> t
      val find : key -> t -> value
      val remove : key -> t -> t
      val mem : key -> t -> bool
      val iter : (key -> value -> unit) -> t -> unit
      val map : (value -> value) -> t -> t
      val mapi : (key -> value -> value) -> t -> t
      val mapii : (key -> value -> key * value) -> t -> t
      val fold : (key -> value -> '-> 'a) -> t -> '-> 'a
      val for_all : (key -> value -> bool) -> t -> bool
      val exists : (key -> value -> bool) -> t -> bool
      val filter : (key -> value -> bool) -> t -> t
      val partition : (key -> value -> bool) -> t -> t * t
      val cardinal : t -> int
      val bindings : t -> (key * value) list
      val min_binding : t -> key * value
      val max_binding : t -> key * value
      val choose : t -> key * value
      val merge :
        (key -> value option -> value option -> value option) -> t -> t -> t
      val for_all2 :
        (key -> value option -> value option -> bool) -> t -> t -> bool
      val exists2 :
        (key -> value option -> value option -> bool) -> t -> t -> bool
      val iter2 :
        (key -> value option -> value option -> unit) -> t -> t -> unit
      val fold2 :
        (key -> value option -> value option -> '-> 'a) ->
        t -> t -> '-> 'a
      val fold_range :
        (key -> Rangemap.fuzzy_order) ->
        (key -> Rangemap.Value.t -> '-> 'a) -> t -> '-> 'a
      val height : t -> int
      val concerned_intervals :
        (key -> key -> Rangemap.fuzzy_order) ->
        key -> t -> (key * Rangemap.Value.t) list
      exception Empty_rangemap
      val lowest_binding : t -> key * Rangemap.Value.t
      exception No_such_binding
      val lowest_binding_above : (key -> bool) -> t -> key * Rangemap.Value.t
      val add_whole :
        (key -> key -> Rangemap.fuzzy_order) ->
        key -> Rangemap.Value.t -> t -> t
      val remove_whole :
        (key -> key -> Rangemap.fuzzy_order) -> key -> t -> t
    end