Module Annot.Domain

The part of an expression's typing already covered by the branches of an intersection, used to avoid exploring a branch that would add nothing.

An environment refinement is compared by encoding it as an open record type — one field per constrained variable — which turns "is this refinement within the union of those already explored" into a subtyping test.

type t
val empty : t
val add : IAnnot.coverage -> t -> t
val covers : t -> IAnnot.coverage -> bool

Whether the recorded coverages already subsume the given one, i.e. whether every environment it applies to is handled by a branch already explored for a result at least as precise. Results are only comparable when they come from the same node (same Rid.t).

val pp : Stdlib.Format.formatter -> t -> unit