    sig
      module Hashtbl :
        sig
          type ('a, 'b) t = ('a, 'b) Hashtbl.t
          val create : int -> ('a, 'b) MoreLabels.Hashtbl.t
          val clear : ('a, 'b) MoreLabels.Hashtbl.t -> unit
          val add : ('a, 'b) MoreLabels.Hashtbl.t -> key:'a -> data:'b -> unit
          val copy :
            ('a, 'b) MoreLabels.Hashtbl.t -> ('a, 'b) MoreLabels.Hashtbl.t
          val find : ('a, 'b) MoreLabels.Hashtbl.t -> 'a -> 'b
          val find_all : ('a, 'b) MoreLabels.Hashtbl.t -> 'a -> 'b list
          val mem : ('a, 'b) MoreLabels.Hashtbl.t -> 'a -> bool
          val remove : ('a, 'b) MoreLabels.Hashtbl.t -> 'a -> unit
          val replace :
            ('a, 'b) MoreLabels.Hashtbl.t -> key:'a -> data:'b -> unit
          val iter :
            f:(key:'a -> data:'b -> unit) ->
            ('a, 'b) MoreLabels.Hashtbl.t -> unit
          val fold :
            f:(key:'a -> data:'b -> 'c -> 'c) ->
            ('a, 'b) MoreLabels.Hashtbl.t -> init:'c -> 'c
          module type HashedType = Hashtbl.HashedType
          module type S =
            sig
              type key
              and 'a t
              val create : int -> 'a MoreLabels.Hashtbl.S.t
              val clear : 'a MoreLabels.Hashtbl.S.t -> unit
              val copy : 'a MoreLabels.Hashtbl.S.t -> 'a MoreLabels.Hashtbl.S.t
              val add :
                'a MoreLabels.Hashtbl.S.t ->
                key:MoreLabels.Hashtbl.S.key -> data:'a -> unit
              val remove :
                'a MoreLabels.Hashtbl.S.t -> MoreLabels.Hashtbl.S.key -> unit
              val find :
                'a MoreLabels.Hashtbl.S.t -> MoreLabels.Hashtbl.S.key -> 'a
              val find_all :
                'a MoreLabels.Hashtbl.S.t -> MoreLabels.Hashtbl.S.key -> 'a list
              val replace :
                'a MoreLabels.Hashtbl.S.t ->
                key:MoreLabels.Hashtbl.S.key -> data:'a -> unit
              val mem :
                'a MoreLabels.Hashtbl.S.t -> MoreLabels.Hashtbl.S.key -> bool
              val iter :
                f:(key:MoreLabels.Hashtbl.S.key -> data:'a -> unit) ->
                'a MoreLabels.Hashtbl.S.t -> unit
              val fold :
                f:(key:MoreLabels.Hashtbl.S.key -> data:'a -> 'b -> 'b) ->
                'a MoreLabels.Hashtbl.S.t -> init:'b -> 'b
            end
          module Make :
            functor (H : HashedType) ->
              sig
                type key = H.t
                and 'a t
                val create : int -> 'a MoreLabels.Hashtbl.S.t
                val clear : 'a MoreLabels.Hashtbl.S.t -> unit
                val copy : 'a MoreLabels.Hashtbl.S.t -> 'a MoreLabels.Hashtbl.S.t
                val add :
                  'a MoreLabels.Hashtbl.S.t ->
                  key:MoreLabels.Hashtbl.S.key -> data:'a -> unit
                val remove :
                  'a MoreLabels.Hashtbl.S.t -> MoreLabels.Hashtbl.S.key -> unit
                val find :
                  'a MoreLabels.Hashtbl.S.t -> MoreLabels.Hashtbl.S.key -> 'a
                val find_all :
                  'a MoreLabels.Hashtbl.S.t ->
                  MoreLabels.Hashtbl.S.key -> 'a list
                val replace :
                  'a MoreLabels.Hashtbl.S.t ->
                  key:MoreLabels.Hashtbl.S.key -> data:'a -> unit
                val mem :
                  'a MoreLabels.Hashtbl.S.t -> MoreLabels.Hashtbl.S.key -> bool
                val iter :
                  f:(key:MoreLabels.Hashtbl.S.key -> data:'a -> unit) ->
                  'a MoreLabels.Hashtbl.S.t -> unit
                val fold :
                  f:(key:MoreLabels.Hashtbl.S.key -> data:'a -> 'b -> 'b) ->
                  'a MoreLabels.Hashtbl.S.t -> init:'b -> 'b
              end
          val hash : 'a -> int
          external hash_param : int -> int -> 'a -> int = "hash_univ_param"
            "noalloc"
        end
      module Map :
        sig
          module type OrderedType = Map.OrderedType
          module type S =
            sig
              type key
              and +'a t
              val empty : 'a MoreLabels.Map.S.t
              val add :
                key:MoreLabels.Map.S.key ->
                data:'a -> 'a MoreLabels.Map.S.t -> 'a MoreLabels.Map.S.t
              val find : MoreLabels.Map.S.key -> 'a MoreLabels.Map.S.t -> 'a
              val remove :
                MoreLabels.Map.S.key ->
                'a MoreLabels.Map.S.t -> 'a MoreLabels.Map.S.t
              val mem : MoreLabels.Map.S.key -> 'a MoreLabels.Map.S.t -> bool
              val iter :
                f:(key:MoreLabels.Map.S.key -> data:'a -> unit) ->
                'a MoreLabels.Map.S.t -> unit
              val map :
                f:('a -> 'b) -> 'a MoreLabels.Map.S.t -> 'b MoreLabels.Map.S.t
              val mapi :
                f:(MoreLabels.Map.S.key -> 'a -> 'b) ->
                'a MoreLabels.Map.S.t -> 'b MoreLabels.Map.S.t
              val fold :
                f:(key:MoreLabels.Map.S.key -> data:'a -> 'b -> 'b) ->
                'a MoreLabels.Map.S.t -> init:'b -> 'b
            end
          module Make :
            functor (Ord : OrderedType) ->
              sig
                type key = Ord.t
                and +'a t
                val empty : 'a MoreLabels.Map.S.t
                val add :
                  key:MoreLabels.Map.S.key ->
                  data:'a -> 'a MoreLabels.Map.S.t -> 'a MoreLabels.Map.S.t
                val find : MoreLabels.Map.S.key -> 'a MoreLabels.Map.S.t -> 'a
                val remove :
                  MoreLabels.Map.S.key ->
                  'a MoreLabels.Map.S.t -> 'a MoreLabels.Map.S.t
                val mem : MoreLabels.Map.S.key -> 'a MoreLabels.Map.S.t -> bool
                val iter :
                  f:(key:MoreLabels.Map.S.key -> data:'a -> unit) ->
                  'a MoreLabels.Map.S.t -> unit
                val map :
                  f:('a -> 'b) -> 'a MoreLabels.Map.S.t -> 'b MoreLabels.Map.S.t
                val mapi :
                  f:(MoreLabels.Map.S.key -> 'a -> 'b) ->
                  'a MoreLabels.Map.S.t -> 'b MoreLabels.Map.S.t
                val fold :
                  f:(key:MoreLabels.Map.S.key -> data:'a -> 'b -> 'b) ->
                  'a MoreLabels.Map.S.t -> init:'b -> 'b
              end
        end
      module Set :
        sig
          module type OrderedType = Set.OrderedType
          module type S =
            sig
              type elt
              and t
              val empty : MoreLabels.Set.S.t
              val is_empty : MoreLabels.Set.S.t -> bool
              val mem : MoreLabels.Set.S.elt -> MoreLabels.Set.S.t -> bool
              val add :
                MoreLabels.Set.S.elt -> MoreLabels.Set.S.t -> MoreLabels.Set.S.t
              val singleton : MoreLabels.Set.S.elt -> MoreLabels.Set.S.t
              val remove :
                MoreLabels.Set.S.elt -> MoreLabels.Set.S.t -> MoreLabels.Set.S.t
              val union :
                MoreLabels.Set.S.t -> MoreLabels.Set.S.t -> MoreLabels.Set.S.t
              val inter :
                MoreLabels.Set.S.t -> MoreLabels.Set.S.t -> MoreLabels.Set.S.t
              val diff :
                MoreLabels.Set.S.t -> MoreLabels.Set.S.t -> MoreLabels.Set.S.t
              val compare : MoreLabels.Set.S.t -> MoreLabels.Set.S.t -> int
              val equal : MoreLabels.Set.S.t -> MoreLabels.Set.S.t -> bool
              val subset : MoreLabels.Set.S.t -> MoreLabels.Set.S.t -> bool
              val iter :
                f:(MoreLabels.Set.S.elt -> unit) -> MoreLabels.Set.S.t -> unit
              val fold :
                f:(MoreLabels.Set.S.elt -> 'a -> 'a) ->
                MoreLabels.Set.S.t -> init:'a -> 'a
              val for_all :
                f:(MoreLabels.Set.S.elt -> bool) -> MoreLabels.Set.S.t -> bool
              val exists :
                f:(MoreLabels.Set.S.elt -> bool) -> MoreLabels.Set.S.t -> bool
              val filter :
                f:(MoreLabels.Set.S.elt -> bool) ->
                MoreLabels.Set.S.t -> MoreLabels.Set.S.t
              val partition :
                f:(MoreLabels.Set.S.elt -> bool) ->
                MoreLabels.Set.S.t -> MoreLabels.Set.S.t * MoreLabels.Set.S.t
              val cardinal : MoreLabels.Set.S.t -> int
              val elements : MoreLabels.Set.S.t -> MoreLabels.Set.S.elt list
              val min_elt : MoreLabels.Set.S.t -> MoreLabels.Set.S.elt
              val max_elt : MoreLabels.Set.S.t -> MoreLabels.Set.S.elt
              val choose : MoreLabels.Set.S.t -> MoreLabels.Set.S.elt
            end
          module Make :
            functor (Ord : OrderedType) ->
              sig
                type elt = Ord.t
                and t
                val empty : MoreLabels.Set.S.t
                val is_empty : MoreLabels.Set.S.t -> bool
                val mem : MoreLabels.Set.S.elt -> MoreLabels.Set.S.t -> bool
                val add :
                  MoreLabels.Set.S.elt ->
                  MoreLabels.Set.S.t -> MoreLabels.Set.S.t
                val singleton : MoreLabels.Set.S.elt -> MoreLabels.Set.S.t
                val remove :
                  MoreLabels.Set.S.elt ->
                  MoreLabels.Set.S.t -> MoreLabels.Set.S.t
                val union :
                  MoreLabels.Set.S.t -> MoreLabels.Set.S.t -> MoreLabels.Set.S.t
                val inter :
                  MoreLabels.Set.S.t -> MoreLabels.Set.S.t -> MoreLabels.Set.S.t
                val diff :
                  MoreLabels.Set.S.t -> MoreLabels.Set.S.t -> MoreLabels.Set.S.t
                val compare : MoreLabels.Set.S.t -> MoreLabels.Set.S.t -> int
                val equal : MoreLabels.Set.S.t -> MoreLabels.Set.S.t -> bool
                val subset : MoreLabels.Set.S.t -> MoreLabels.Set.S.t -> bool
                val iter :
                  f:(MoreLabels.Set.S.elt -> unit) -> MoreLabels.Set.S.t -> unit
                val fold :
                  f:(MoreLabels.Set.S.elt -> 'a -> 'a) ->
                  MoreLabels.Set.S.t -> init:'a -> 'a
                val for_all :
                  f:(MoreLabels.Set.S.elt -> bool) -> MoreLabels.Set.S.t -> bool
                val exists :
                  f:(MoreLabels.Set.S.elt -> bool) -> MoreLabels.Set.S.t -> bool
                val filter :
                  f:(MoreLabels.Set.S.elt -> bool) ->
                  MoreLabels.Set.S.t -> MoreLabels.Set.S.t
                val partition :
                  f:(MoreLabels.Set.S.elt -> bool) ->
                  MoreLabels.Set.S.t -> MoreLabels.Set.S.t * MoreLabels.Set.S.t
                val cardinal : MoreLabels.Set.S.t -> int
                val elements : MoreLabels.Set.S.t -> MoreLabels.Set.S.elt list
                val min_elt : MoreLabels.Set.S.t -> MoreLabels.Set.S.elt
                val max_elt : MoreLabels.Set.S.t -> MoreLabels.Set.S.elt
                val choose : MoreLabels.Set.S.t -> MoreLabels.Set.S.elt
              end
        end
    end