`type 'a escape = `

`| Constructor of Path.t` | |

`| Univ of Types.type_expr` | The type_expr argument of |

`| Self` | |

`| Module_type of Path.t` | |

`| Equation of 'a` |

Scope escape related errors

`type variant = `

`| No_intersection` | |

`| No_tags of position * (Asttypes.label * Types.row_field) list` | |

`| Incompatible_types_for of string` | |

`| Fixed_row of position * fixed_row_case * Types.fixed_explanation` | Fixed row types, e.g. |

`type 'a elt = `

`| Diff of 'a diff` | ||

`| Variant of variant` | ||

`| Obj of obj` | ||

`| Escape of {`
`}` | ||

`| Incompatible_fields of {`
`}` | ||

`| Rec_occur of Types.type_expr * Types.type_expr` |

`val diff : Types.type_expr -> Types.type_expr -> desc elt`

`map_diff f {expected;got}`

is `{expected=f expected; got=f got}`

`val flatten : (Types.type_expr -> Types.type_expr -> 'a) -> t -> 'a elt list`

`flatten f trace`

flattens all elements of type `desc`

in `trace`

to either `f x.t expanded`

if `x.expanded=Some expanded`

or `f x.t x.t`

otherwise