sig
  module type NamePool =
    sig
      type name
      type symbol = int
      type namepool
      val create_pool : unit -> Pool.NamePool.namepool
      val init_pool : Pool.NamePool.namepool -> unit
      val get_name :
        Pool.NamePool.namepool -> Pool.NamePool.symbol -> Pool.NamePool.name
      val add_name :
        Pool.NamePool.namepool -> Pool.NamePool.name -> Pool.NamePool.symbol
      val exists_name : Pool.NamePool.namepool -> Pool.NamePool.name -> bool
      val symbol_equals :
        Pool.NamePool.namepool ->
        Pool.NamePool.symbol -> Pool.NamePool.symbol -> bool
      val pool_size : Pool.NamePool.namepool -> int * int * int
    end
  module MakeNamePool :
    functor (H : Hashtbl.HashedType->
      sig
        type name = H.t
        type symbol = int
        type namepool
        val create_pool : unit -> namepool
        val init_pool : namepool -> unit
        val get_name : namepool -> symbol -> name
        val add_name : namepool -> name -> symbol
        val exists_name : namepool -> name -> bool
        val symbol_equals : namepool -> symbol -> symbol -> bool
        val pool_size : namepool -> int * int * int
      end
end