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