Module Ctype.Unification_trace
type position=|First|Secondtype desc={t : Types.type_expr;expanded : Types.type_expr option;}type 'a diff={got : 'a;expected : 'a;}type 'a escape=|Constructor of Path.t|Univ of Types.type_exprThe type_expr argument of
Univis always aTunivar _, we keep atype_exprto track renaming inPrinttyp|Self|Module_type of Path.t|Equation of 'aScope escape related errors
type variant=|No_intersection|No_tags of position * (Asttypes.label * Types.row_field) list|Incompatible_types_for of stringErrors for polymorphic variants
type obj=|Missing_field of position * string|Abstract_row of position|Self_cannot_be_closedtype 'a elt=|Diff of 'a diff|Variant of variant|Obj of obj|Escape of{context : Types.type_expr option;kind : 'a escape;}|Incompatible_fields of{name : string;diff : Types.type_expr diff;}|Rec_occur of Types.type_expr * Types.type_exprtype t= desc elt list
val diff : Types.type_expr -> Types.type_expr -> desc eltval map_diff : ('a -> 'b) -> 'a diff -> 'b diffmap_diff f {expected;got}is{expected=f expected; got=f got}
val flatten : (Types.type_expr -> Types.type_expr -> 'a) -> t -> 'a elt listflatten f traceflattens all elements of typedescintraceto eitherf x.t expandedifx.expanded=Some expandedorf x.t x.totherwise