a map from PolyType to arrays. Each array contains twice the number of entries as there a type parameters in the PolyType. The first half of the array contains the type bounds that constrain the polytype's type parameters. The second half might contain type variables that track the corresponding parameters, or is left empty (filled with nulls). An instantiated type parameter is represented by having its instance type in the corresponding array entry. The dual use of arrays for poly params and typevars is to save space and hopefully gain some speed.
a map from PolyTypes to arrays. Each array entry corresponds to a parameter P of the polytype; it contains all constrained parameters Q that are known to be smaller than P, i.e. Q <: P.
a map from PolyTypes to arrays. Each array entry corresponds to a parameter P of the polytype; it contains all constrained parameters Q that are known to be greater than P, i.e. P <: Q.
The weakest constraint that subsumes both this constraint and other
The weakest constraint that subsumes both this constraint and other
A new constraint which is derived from this constraint by adding
entries for all type parameters of poly
.
A new constraint which is derived from this constraint by adding
entries for all type parameters of poly
.
A list of type variables associated with the params, or Nil if the constraint will just be checked for satisfiability but will solved to give instances of type variables.
A constraint that includes the relationship p1 <: p2
.
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 PolyParams bound by itself
Check that constraint only refers to PolyParams bound by itself
Check that no constrained parameter contains itself as a bound
Check that no constrained parameter contains itself as a bound
Does this constraint contain the type variable tvar
and is it uninstantiated?
Does this constraint contain the type variable tvar
and is it uninstantiated?
Does the constraint's domain contain the type parameter param
?
Does the constraint's domain contain the type parameter param
?
Does the constraint's domain contain the type parameters of pt
?
Does the constraint's domain contain the type parameters of pt
?
The list of parameters P such that, for a fresh type parameter Q:
The list of parameters P such that, for a fresh type parameter Q:
Q <: tp implies Q <: P and isUpper = true, or tp <: Q implies P <: Q and isUpper = false
The polytype parameters constrained by this constraint
The polytype parameters constrained by this constraint
The polytypes constrained by this constraint
The polytypes constrained by this constraint
The boundsMap
entry corresponding to param
The boundsMap
entry corresponding to param
lower(param) \ lower(butNot)
lower(param) \ lower(butNot)
upper(param) \ upper(butNot)
upper(param) \ upper(butNot)
A fallback text representation, if the pattern matching in Printers does not have a case for this showable element
A fallback text representation, if the pattern matching in Printers does not have a case for this showable element
Check whether predicate holds for all parameters in constraint
Check whether predicate holds for all parameters in constraint
Perform operation op
on all typevars, or only on uninstantiated
typevars, depending on whether uninstOnly
is set or not.
Perform operation 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 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 lower bound of param
including all known-to-be-smaller parameters
The upper bound of param
including all known-to-be-greater parameters
The upper bound of param
including all known-to-be-greater parameters
Is it known that param1 <:< param2
?
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.
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 param
The parameters that are known to be smaller wrt <: than param
Narrow one of the bounds of type parameter param
If isUpper
is true, ensure that param <:
bound, otherwise ensure
that
param >: bound.
Narrow one of the bounds of type parameter param
If isUpper
is true, ensure that param <:
bound, otherwise ensure
that
param >: bound.
The constraint bounds for given type parameter param
.
The constraint bounds for given type parameter param
.
Poly params that are known to be smaller or greater than param
are not contained in the return bounds.
A new constraint with all entries coming from pt
removed.
A new constraint with all entries coming from pt
removed.
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.
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 reason we need to substitute top-level occurrences of the parameter is to deal with situations like the following. Say we have in the constraint
P <: Q & String Q
and we replace Q with P. Then substitution gives
P <: P & String
this would be a cyclic constraint is therefore changed by normalize
and
recombine
below to
P <: String
approximating the RHS occurrence of P with Any. Without the substitution we would not find out where we need to approximate. Occurrences of parameters that are not top-level are not affected.
The string representation of this showable element.
The string representation of this showable element.
The summarized string representation of this showable element.
The summarized string representation of this showable element. Recursion depth is limited to some smallish value. Default is Config.summarizeDepth.
The text representation of this showable element.
The text representation of this showable element. This normally dispatches to a pattern matching method in Printers.
The type variable corresponding to parameter param
, or
NoType, if param
is not in constrained or is not paired with a type variable.
The type variable corresponding to parameter param
, or
NoType, if 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
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
The uninstantiated typevars of this constraint
A new constraint which is derived from this constraint by updating
the entry for parameter param
to tp
.
A new constraint which is derived from this constraint by updating
the entry for parameter param
to tp
.
tp
can be one of the following:
The parameters that are known to be greater wrt <: than param
The parameters that are known to be greater wrt <: than param
Constraint over undetermined type parameters that keeps separate maps to reflect parameter orderings.