Module Errortrace.Subtype

type 'a elt =
  1. | Diff of 'a diff
type 'a t = 'a elt list

Just as outside Subtype, we split traces, completed traces, and complete errors. However, in a minor asymmetry, the name Subtype.error_trace corresponds to the outside error type, and Subtype.error corresponds to the outside *_error types (e.g., unification_error). This error type has the invariant that the subtype trace is nonempty; note that no such invariant is imposed on the unification trace.

type trace = Types.type_expr t
type error_trace = expanded_type t
type unification_error_trace = unification error

To avoid shadowing

type nonrec error = private {
  1. trace : error_trace;
  2. unification_trace : unification error;
}
val error : trace:error_trace -> unification_trace:unification_error_trace -> error
val map : ('a -> 'b) -> 'a t -> 'b t