sig
  type +'a t = private { id : int; ty : 'a; }
  type 'a hvar = 'HVar.t
  val make : ty:'-> int -> 'HVar.t
  val id : 'HVar.t -> int
  val ty : 'HVar.t -> 'a
  val cast : 'HVar.t -> ty:'-> 'HVar.t
  val update_ty : 'HVar.t -> f:('-> 'b) -> 'HVar.t
  val compare : 'HVar.t -> 'HVar.t -> int
  val equal : 'HVar.t -> 'HVar.t -> bool
  val hash : 'HVar.t -> int
  val hash_fun : 'HVar.t CCHash.hash_fun
  val max : 'HVar.t -> 'HVar.t -> 'HVar.t
  val min : 'HVar.t -> 'HVar.t -> 'HVar.t
  val pp : 'HVar.t CCFormat.printer
  val to_string : 'HVar.t -> string
  val make_unsafe : ty:'-> int -> 'HVar.t
  val fresh : ty:'-> unit -> 'HVar.t
end