sig
  type ('a, 'typ, 'b) t
  val create : int -> ('a, 'typ, 'b) Syntax.Expr.HT.t
  val add :
    ('a, 'typ, 'b) Syntax.Expr.HT.t -> ('a, 'typ) Syntax.expr -> '-> unit
  val replace :
    ('a, 'typ, 'b) Syntax.Expr.HT.t -> ('a, 'typ) Syntax.expr -> '-> unit
  val remove :
    ('a, 'typ, 'b) Syntax.Expr.HT.t -> ('a, 'typ) Syntax.expr -> unit
  val find : ('a, 'typ, 'b) Syntax.Expr.HT.t -> ('a, 'typ) Syntax.expr -> 'b
  val mem : ('a, 'typ, 'b) Syntax.Expr.HT.t -> ('a, 'typ) Syntax.expr -> bool
  val keys :
    ('a, 'typ, 'b) Syntax.Expr.HT.t -> ('a, 'typ) Syntax.expr BatEnum.t
  val values : ('a, 'typ, 'b) Syntax.Expr.HT.t -> 'BatEnum.t
  val enum :
    ('a, 'typ, 'b) Syntax.Expr.HT.t ->
    (('a, 'typ) Syntax.expr * 'b) BatEnum.t
end