abstract class Constraint
extends Showable

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.

Constructors

Constraint ( )

Members

type This = Nothing <: Constraint
def & ( other: Constraint ) ( implicit ctx: Context ) : Constraint

The weakest constraint that subsumes both this constraint and other

The weakest constraint that subsumes both this constraint and other

def add ( poly: TypeLambda , tvars: List [ TypeVar ] ) ( implicit ctx: Context ) : This

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.

[+] def addLess ( p1: TypeParamRef , p2: TypeParamRef ) ( implicit ctx: Context ) : This

A constraint that includes the relationship p1 <: p2. <: relationships between parameters ("edges") are propagated, but non-parameter bounds are left al...

A constraint that includes the relationship p1 <: p2. <: relationships between parameters ("edges") are propagated, but non-parameter bounds are left alone.

def checkClosed ( ) ( implicit ctx: Context ) : Unit

Check that constraint only refers to TypeParamRefs bound by itself

Check that constraint only refers to TypeParamRefs bound by itself

def checkNonCyclic ( ) ( implicit ctx: Context ) : Unit

Check that no constrained parameter contains itself as a bound

Check that no constrained parameter contains itself as a bound

def contains ( pt: TypeLambda ) : Boolean

Does the constraint's domain contain the type parameters of pt?

Does the constraint's domain contain the type parameters of pt?

def contains ( param: TypeParamRef ) : Boolean

Does the constraint's domain contain the type parameter param?

Does the constraint's domain contain the type parameter param?

def contains ( tvar: TypeVar ) : Boolean

Does this constraint contain the type variable tvar and is it uninstantiated?

Does this constraint contain the type variable tvar and is it uninstantiated?

def domainLambdas : List [ TypeLambda ]

The type lambdas constrained by this constraint

The type lambdas constrained by this constraint

def domainParams : List [ TypeParamRef ]

The type lambda parameters constrained by this constraint

The type lambda parameters constrained by this constraint

def entry ( param: TypeParamRef ) : Type

The constraint entry for given type parameter param, or NoType if param is not part of the constraint domain. Note: Low level, implementation dependent...

The constraint entry for given type parameter param, or NoType if param is not part of the constraint domain. Note: Low level, implementation dependent.

def exclusiveLower ( param: TypeParamRef , butNot: TypeParamRef ) : List [ TypeParamRef ]

lower(param) \ lower(butNot)

lower(param) \ lower(butNot)

def exclusiveUpper ( param: TypeParamRef , butNot: TypeParamRef ) : List [ TypeParamRef ]

upper(param) \ upper(butNot)

upper(param) \ upper(butNot)

def forallParams ( p: TypeParamRef => Boolean ) : Boolean

Check whether predicate holds for all parameters in constraint

Check whether predicate holds for all parameters in constraint

def foreachTypeVar ( op: TypeVar => Unit ) : Unit

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.

def fullBounds ( param: TypeParamRef ) ( implicit ctx: Context ) : TypeBounds

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

def fullLowerBound ( param: TypeParamRef ) ( implicit ctx: Context ) : Type

The lower bound of param including all known-to-be-smaller parameters

The lower bound of param including all known-to-be-smaller parameters

def fullUpperBound ( param: TypeParamRef ) ( implicit ctx: Context ) : Type

The upper bound of param including all known-to-be-greater parameters

The upper bound of param including all known-to-be-greater parameters

def isLess ( param1: TypeParamRef , param2: TypeParamRef ) : Boolean

Is it known that param1 <:< param2?

Is it known that param1 <:< param2?

[+] def isRemovable ( pt: TypeLambda ) : Boolean

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 fie...

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.

def lower ( param: TypeParamRef ) : List [ TypeParamRef ]

The parameters that are known to be smaller wrt <: than param

The parameters that are known to be smaller wrt <: than param

[+] def nonParamBounds ( param: TypeParamRef ) : TypeBounds

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 bou...

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.

def remove ( pt: TypeLambda ) ( implicit ctx: Context ) : This

A new constraint with all entries coming from pt removed.

A new constraint with all entries coming from pt removed.

[+] def replace ( param: TypeParamRef , tp: Type ) ( implicit ctx: Context ) : This

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 t...

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.

def typeVarOfParam ( param: TypeParamRef ) : Type

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.

def unify ( p1: TypeParamRef , p2: TypeParamRef ) ( implicit ctx: Context ) : This

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

def uninstVars : Seq [ TypeVar ]

The uninstantiated typevars of this constraint

The uninstantiated typevars of this constraint

def updateEntry ( param: TypeParamRef , tp: Type ) ( implicit ctx: Context ) : This

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:

  • A TypeBounds value, indicating new constraint bounds
  • Another type, indicating a solution for the parameter

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:

  • A TypeBounds value, indicating new constraint bounds
  • Another type, indicating a solution for the parameter
def upper ( param: TypeParamRef ) : List [ TypeParamRef ]

The parameters that are known to be greater wrt <: than param

The parameters that are known to be greater wrt <: than param