Constraint over undetermined type parameters. Constraints are built over values of the following types:
- TypeLambda A constraint constrains the type parameters of a set of TypeLambdas
- TypeParamRef The parameters of the constrained type lambdas
- TypeVar Every constrained parameter might be associated with a TypeVar that has the TypeParamRef as origin.
The weakest constraint that subsumes both this constraint and
A new constraint which is derived from this constraint by adding
entries for all type parameters of
A constraint that includes the relationship
p1 <: p2.
<: relationships between parameters ("edges") are propagated, but
non-parameter bounds are left alone.
Check that constraint only refers to TypeParamRefs bound by itself
Check that no constrained parameter contains itself as a bound
Does the constraint's domain contain the type parameters of
Does the constraint's domain contain the type parameter
Does this constraint contain the type variable
tvar and is it uninstantiated?
The type lambdas constrained by this constraint
The type lambda parameters constrained by this constraint
The constraint entry for given type parameter
param, or NoType if
param is not part of
the constraint domain. Note: Low level, implementation dependent.
lower(param) \ lower(butNot)
upper(param) \ upper(butNot)
Check whether predicate holds for all parameters in constraint
op on all typevars, or only on uninstantiated
typevars, depending on whether
uninstOnly is set or not.
The bounds of
param including all known-to-be-smaller and -greater parameters
The lower bound of
param including all known-to-be-smaller parameters
The upper bound of
param including all known-to-be-greater parameters
Is it known that
param1 <:< param2?
Is entry associated with
pt removable? This is the case if
all type parameters of the entry are associated with type variables
which have their
inst fields set.
The parameters that are known to be smaller wrt <: than
The constraint bounds for given type parameter
Poly params that are known to be smaller or greater than
are not contained in the return bounds.
A new constraint with all entries coming from
A new constraint which is derived from this constraint by removing
the type parameter
param from the domain and replacing all top-level occurrences
of the parameter elsewhere in the constraint by type
tp, or a conservative
approximation of it if that is needed to avoid cycles.
Occurrences nested inside a refinement or prefix are not affected.
The type variable corresponding to parameter
param is not in constrained or is not paired with a type variable.
A constraint resulting from adding p2 = p1 to this constraint, and at the same time transferring all bounds of p2 to p1
The uninstantiated typevars of this constraint
A new constraint which is derived from this constraint by updating
the entry for parameter
tp can be one of the following:
- A TypeBounds value, indicating new constraint bounds
- Another type, indicating a solution for the parameter
The parameters that are known to be greater wrt <: than