functor (T : Type_with_map_module->
  sig
    module Key :
      sig
        type t = T.Map.Key.t
        type comparator_witness = T.Map.Key.comparator_witness
        val comparator :
          (t, comparator_witness) Core_kernel.Std.Comparator.comparator
      end
    module Interval :
      sig
        type t = Key.t Interval.t
        val is_empty : t -> bool
        val contains : t -> Key.t -> bool
      end
    type 'a t = (Key.t, 'a, Key.comparator_witness) t
    val create :
      left_of_leftmost:'->
      value_right_of:(Key.t, 'a, Key.comparator_witness)
                     Core_kernel.Std.Map.t ->
      'a t
    val always : '-> 'a t
    val find : 'v t -> Key.t -> 'v
    val change : 'v t -> at:Key.t -> '-> 'v t
    val map : 'a t -> f:('-> 'b) -> 'b t
    val map2 : 'a t -> 'b t -> f:('-> '-> 'c) -> 'c t
    val remove_changes_within : 'v t -> Interval.t -> 'v t
    val set_within : 'v t -> Interval.t -> '-> 'v t
    val map_within : 'v t -> Interval.t -> f:('-> 'v) -> 'v t
    val construct_preimage :
      'v t -> ('v * Interval.t) Core_kernel.Std.Sequence.t
    val compare : ('-> '-> int) -> 'a t -> 'a t -> int
    val t_of_sexp : (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
    val sexp_of_t : ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
  end