module Constraint:
val new_type : unit -> Types.t
val new_nexp : unit -> Types.nexp
val equate_types : Ast.l -> string -> Types.t -> Types.t -> unit
val in_range : Ast.l -> Types.nexp -> Types.nexp -> unit
val add_constraint : Path.t -> Types.t -> unit
val add_length_constraint : Types.range -> unit
val add_tyvar : Tyvar.t -> unit
val add_nvar : Nvar.t -> unit
val inst_leftover_uvars : Ast.l -> Types.typ_constraints
val check_numeric_constraint_implication : Ast.l -> Types.range -> Types.range list -> unit