sig
  module type HashableComparableType =
    sig
      type t
      val equal :
        InvertibleArray.HashableComparableType.t ->
        InvertibleArray.HashableComparableType.t -> bool
      val compare :
        InvertibleArray.HashableComparableType.t ->
        InvertibleArray.HashableComparableType.t -> int
      val hash : InvertibleArray.HashableComparableType.t -> int
      val to_string : InvertibleArray.HashableComparableType.t -> string
    end
  module type S =
    sig
      type elem
      type t
      val make : int -> int -> InvertibleArray.S.elem -> InvertibleArray.S.t
      val from_array :
        exn ->
        InvertibleArray.S.elem array ->
        InvertibleArray.S.elem -> InvertibleArray.S.t
      val to_array : InvertibleArray.S.t -> InvertibleArray.S.elem array
      val length : InvertibleArray.S.t -> int
      val capacity : InvertibleArray.S.t -> int
      val get : InvertibleArray.S.t -> Utils.u2 -> InvertibleArray.S.elem
      val set :
        InvertibleArray.S.t -> Utils.u2 -> InvertibleArray.S.elem -> unit
      val find : InvertibleArray.S.elem -> InvertibleArray.S.t -> Utils.u2
      val add :
        exn ->
        InvertibleArray.S.t ->
        InvertibleArray.S.elem -> InvertibleArray.S.elem -> bool -> Utils.u2
      val add_if_not_found :
        exn ->
        InvertibleArray.S.t ->
        InvertibleArray.S.elem -> InvertibleArray.S.elem -> bool -> Utils.u2
      val equal : InvertibleArray.S.t -> InvertibleArray.S.t -> bool
      val compare : InvertibleArray.S.t -> InvertibleArray.S.t -> int
      val hash : InvertibleArray.S.t -> int
      val to_string : InvertibleArray.S.t -> string
    end
  module Make :
    functor (T : HashableComparableType->
      sig
        type elem = T.t
        type t
        val make : int -> int -> elem -> t
        val from_array : exn -> elem array -> elem -> t
        val to_array : t -> elem array
        val length : t -> int
        val capacity : t -> int
        val get : t -> Utils.u2 -> elem
        val set : t -> Utils.u2 -> elem -> unit
        val find : elem -> t -> Utils.u2
        val add : exn -> t -> elem -> elem -> bool -> Utils.u2
        val add_if_not_found : exn -> t -> elem -> elem -> bool -> Utils.u2
        val equal : t -> t -> bool
        val compare : t -> t -> int
        val hash : t -> int
        val to_string : t -> string
      end
end