    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