Ltac2_plugin.Tac2typing_env
module TVar : sig ... end
val empty_env : ?strict:bool -> unit -> t
default strict:true
val set_rec : (Names.KerName.t * int) Names.Id.Map.t -> t -> t
val env_strict : t -> bool
val get_alias : Names.lident -> t -> TVar.t
val find_rec_var : Names.Id.t -> t -> (Names.KerName.t * int) option
type mix_type_scheme = int * mix_var Tac2expr.glb_typexpr
val mem_var : Names.Id.t -> t -> bool
val find_var : Names.Id.t -> t -> mix_type_scheme
val bound_vars : t -> Names.Id.Set.t
val get_variable0 : (Names.Id.t -> bool) -> Tac2expr.tacref Tac2expr.or_relid -> Tac2expr.tacref Locus.or_var
val get_variable : t -> Tac2expr.tacref Tac2expr.or_relid -> Tac2expr.tacref Locus.or_var
val kind : t -> TVar.t Tac2expr.glb_typexpr -> TVar.t Tac2expr.glb_typexpr
View function, allows to ensure head normal forms
val pr_glbtype : t -> TVar.t Tac2expr.glb_typexpr -> Pp.t
val eq_or_tuple : ('a -> 'b -> bool) -> 'a Tac2expr.or_tuple -> 'b Tac2expr.or_tuple -> bool
exception CannotUnify of TVar.t Tac2expr.glb_typexpr * TVar.t Tac2expr.glb_typexpr
val unify0 : t -> TVar.t Tac2expr.glb_typexpr -> TVar.t Tac2expr.glb_typexpr -> unit
unify0 raises CannotUnify, unify raises usererror
val unify : ?loc:Loc.t -> t -> TVar.t Tac2expr.glb_typexpr -> TVar.t Tac2expr.glb_typexpr -> unit
val unify_arrow : ?loc:Loc.t -> t -> TVar.t Tac2expr.glb_typexpr -> (Loc.t option * TVar.t Tac2expr.glb_typexpr) list -> TVar.t Tac2expr.glb_typexpr
val abstract_var : t -> TVar.t Tac2expr.glb_typexpr -> mix_type_scheme
val monomorphic : TVar.t Tac2expr.glb_typexpr -> mix_type_scheme
val polymorphic : Tac2expr.type_scheme -> mix_type_scheme
val push_name : Names.Name.t -> mix_type_scheme -> t -> t
val push_ids : mix_type_scheme Names.Id.Map.t -> t -> t
val subst_type : ('a -> 'b Tac2expr.glb_typexpr) -> 'a Tac2expr.glb_typexpr -> 'b Tac2expr.glb_typexpr
val normalize : t -> (int Stdlib.ref * int Tac2expr.glb_typexpr TVar.Map.t Stdlib.ref) -> TVar.t Tac2expr.glb_typexpr -> int Tac2expr.glb_typexpr