    sig
      module type OrderedType =
        sig
          type t
          val compare : Map.OrderedType.t -> Map.OrderedType.t -> int
        end
      module type S =
        sig
          type key
          and +'a t
          val empty : 'a Map.S.t
          val add : Map.S.key -> 'a -> 'a Map.S.t -> 'a Map.S.t
          val find : Map.S.key -> 'a Map.S.t -> 'a
          val remove : Map.S.key -> 'a Map.S.t -> 'a Map.S.t
          val mem : Map.S.key -> 'a Map.S.t -> bool
          val iter : (Map.S.key -> 'a -> unit) -> 'a Map.S.t -> unit
          val map : ('a -> 'b) -> 'a Map.S.t -> 'b Map.S.t
          val mapi : (Map.S.key -> 'a -> 'b) -> 'a Map.S.t -> 'b Map.S.t
          val fold : (Map.S.key -> 'a -> 'b -> 'b) -> 'a Map.S.t -> 'b -> 'b
        end
      module Make :
        functor (Ord : OrderedType) ->
          sig
            type key = Ord.t
            and +'a t
            val empty : 'a Map.S.t
            val add : Map.S.key -> 'a -> 'a Map.S.t -> 'a Map.S.t
            val find : Map.S.key -> 'a Map.S.t -> 'a
            val remove : Map.S.key -> 'a Map.S.t -> 'a Map.S.t
            val mem : Map.S.key -> 'a Map.S.t -> bool
            val iter : (Map.S.key -> 'a -> unit) -> 'a Map.S.t -> unit
            val map : ('a -> 'b) -> 'a Map.S.t -> 'b Map.S.t
            val mapi : (Map.S.key -> 'a -> 'b) -> 'a Map.S.t -> 'b Map.S.t
            val fold : (Map.S.key -> 'a -> 'b -> 'b) -> 'a Map.S.t -> 'b -> 'b
          end
    end