sig
  module type S = sig type t val get_hash : GenericMap.S.t -> int end
  module type GenericMapSig =
    sig
      type key
      type 'a t
      val empty : 'GenericMap.GenericMapSig.t
      val is_empty : 'GenericMap.GenericMapSig.t -> bool
      val add :
        GenericMap.GenericMapSig.key ->
        '-> 'GenericMap.GenericMapSig.t -> 'GenericMap.GenericMapSig.t
      val cardinal : 'GenericMap.GenericMapSig.t -> int
      val modify :
        GenericMap.GenericMapSig.key ->
        ('a option -> 'a) ->
        'GenericMap.GenericMapSig.t -> 'GenericMap.GenericMapSig.t
      val find :
        GenericMap.GenericMapSig.key -> 'GenericMap.GenericMapSig.t -> 'a
      val remove :
        GenericMap.GenericMapSig.key ->
        'GenericMap.GenericMapSig.t -> 'GenericMap.GenericMapSig.t
      val mem :
        GenericMap.GenericMapSig.key -> 'GenericMap.GenericMapSig.t -> bool
      val iter :
        (GenericMap.GenericMapSig.key -> '-> unit) ->
        'GenericMap.GenericMapSig.t -> unit
      val map :
        ('-> 'b) ->
        'GenericMap.GenericMapSig.t -> 'GenericMap.GenericMapSig.t
      val mapi :
        (GenericMap.GenericMapSig.key -> '-> 'b) ->
        'GenericMap.GenericMapSig.t -> 'GenericMap.GenericMapSig.t
      val fold :
        (GenericMap.GenericMapSig.key -> '-> '-> 'b) ->
        'GenericMap.GenericMapSig.t -> '-> 'b
      val compare :
        ('-> '-> int) ->
        'GenericMap.GenericMapSig.t -> 'GenericMap.GenericMapSig.t -> int
      val equal :
        ('-> '-> bool) ->
        'GenericMap.GenericMapSig.t ->
        'GenericMap.GenericMapSig.t -> bool
      val merge :
        ('-> '-> 'a) ->
        'GenericMap.GenericMapSig.t ->
        'GenericMap.GenericMapSig.t -> 'GenericMap.GenericMapSig.t
      val choose_and_remove :
        'GenericMap.GenericMapSig.t ->
        GenericMap.GenericMapSig.key * 'a * 'GenericMap.GenericMapSig.t
      val filter :
        ('-> bool) ->
        'GenericMap.GenericMapSig.t -> 'GenericMap.GenericMapSig.t
      val filteri :
        (GenericMap.GenericMapSig.key -> '-> bool) ->
        'GenericMap.GenericMapSig.t -> 'GenericMap.GenericMapSig.t
      val key_elements :
        'GenericMap.GenericMapSig.t -> GenericMap.GenericMapSig.key list
      val value_elements : 'GenericMap.GenericMapSig.t -> 'a list
      val elements :
        'GenericMap.GenericMapSig.t ->
        (GenericMap.GenericMapSig.key * 'a) list
      val subset :
        ('-> '-> bool) ->
        'GenericMap.GenericMapSig.t ->
        'GenericMap.GenericMapSig.t -> bool
    end
  module Make :
    functor (El : S->
      sig
        type key = El.t
        type 'a t
        val empty : 'a t
        val is_empty : 'a t -> bool
        val add : key -> '-> 'a t -> 'a t
        val cardinal : 'a t -> int
        val modify : key -> ('a option -> 'a) -> 'a t -> 'a t
        val find : key -> 'a t -> 'a
        val remove : key -> 'a t -> 'a t
        val mem : key -> 'a t -> bool
        val iter : (key -> '-> unit) -> 'a t -> unit
        val map : ('-> 'b) -> 'a t -> 'b t
        val mapi : (key -> '-> 'b) -> 'a t -> 'b t
        val fold : (key -> '-> '-> 'b) -> 'a t -> '-> 'b
        val compare : ('-> '-> int) -> 'a t -> 'a t -> int
        val equal : ('-> '-> bool) -> 'a t -> 'a t -> bool
        val merge : ('-> '-> 'a) -> 'a t -> 'a t -> 'a t
        val choose_and_remove : 'a t -> key * 'a * 'a t
        val filter : ('-> bool) -> 'a t -> 'a t
        val filteri : (key -> '-> bool) -> 'a t -> 'a t
        val key_elements : 'a t -> key list
        val value_elements : 'a t -> 'a list
        val elements : 'a t -> (key * 'a) list
        val subset : ('-> '-> bool) -> 'a t -> 'a t -> bool
      end
  module MaptoSet :
    functor
      (S : sig type t end) (GMap : sig
                                     type key = S.t
                                     type 'a t
                                     val empty : 'a t
                                     val is_empty : 'a t -> bool
                                     val add : key -> '-> 'a t -> 'a t
                                     val cardinal : 'a t -> int
                                     val modify :
                                       key ->
                                       ('a option -> 'a) -> 'a t -> 'a t
                                     val find : key -> 'a t -> 'a
                                     val remove : key -> 'a t -> 'a t
                                     val mem : key -> 'a t -> bool
                                     val iter :
                                       (key -> '-> unit) -> 'a t -> unit
                                     val map : ('-> 'b) -> 'a t -> 'b t
                                     val mapi :
                                       (key -> '-> 'b) -> 'a t -> 'b t
                                     val fold :
                                       (key -> '-> '-> 'b) ->
                                       'a t -> '-> 'b
                                     val compare :
                                       ('-> '-> int) ->
                                       'a t -> 'a t -> int
                                     val equal :
                                       ('-> '-> bool) ->
                                       'a t -> 'a t -> bool
                                     val merge :
                                       ('-> '-> 'a) ->
                                       'a t -> 'a t -> 'a t
                                     val choose_and_remove :
                                       'a t -> key * 'a * 'a t
                                     val filter :
                                       ('-> bool) -> 'a t -> 'a t
                                     val filteri :
                                       (key -> '-> bool) -> 'a t -> 'a t
                                     val key_elements : 'a t -> key list
                                     val value_elements : 'a t -> 'a list
                                     val elements : 'a t -> (key * 'a) list
                                     val subset :
                                       ('-> '-> bool) ->
                                       'a t -> 'a t -> bool
                                   end) (GSet : sig
                                                  type t
                                                  type elt = S.t
                                                  val empty : t
                                                  val is_empty : t -> bool
                                                  val singleton : elt -> t
                                                  val mem : elt -> t -> bool
                                                  val add : elt -> t -> t
                                                  val remove : elt -> t -> t
                                                  val union : t -> t -> t
                                                  val diff : t -> t -> t
                                                  val equal : t -> t -> bool
                                                  val elements :
                                                    t -> elt list
                                                  val cardinal : t -> int
                                                  val iter :
                                                    (elt -> unit) ->
                                                    t -> unit
                                                  val fold :
                                                    (elt -> '-> 'b) ->
                                                    t -> '-> 'b
                                                  val exists :
                                                    (elt -> bool) ->
                                                    t -> bool
                                                  val filter :
                                                    (elt -> bool) -> t -> t
                                                  val inter : t -> t -> t
                                                  val of_list : elt list -> t
                                                  val of_array :
                                                    elt array -> t
                                                  val subset : t -> t -> bool
                                                end->
      sig val to_set : 'GMap.t -> GSet.t end
end