Module Compiler.Inferer

val theta0 : Types.tysubst
val new_typevar : int -> Types.ty * int
val lookup : string -> (string * 'a) list -> 'b
val occurs : Types.ty -> Types.ty -> bool
val subst_ty : (Types.tyvar * Types.ty) list -> Types.ty -> Types.ty
val subst_tyenv : (Types.tyvar * Types.ty) list -> ('a * Types.ty) list -> ('b * Types.ty) list
val subst_eql : (Types.tyvar * Types.ty) list -> (Types.ty * Types.ty) list -> (Types.ty * Types.ty) list
val compose_subst : (Types.tyvar * Types.ty) list -> (Types.tyvar * Types.ty) list -> (Types.tyvar * Types.ty) list
val unify : (Types.ty * Types.ty) list -> (Types.tyvar * Types.ty) list
val tinf : Ast.ast -> (string * Types.ty) list * Types.ty * Types.tysubst * int * Ast.ast