Compiler.Inferer
val theta0 : Types.tysubst
val new_typevar : int -> Types.ty * int
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 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