Dotty Documentation

0.4.0-bin-SNAPSHOT

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

[+] 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.

[+] 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 alone.

[+] def checkClosed ( ) ( implicit ctx: Context ) : Unit

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

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

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?

[+] def contains ( tvar: TypeVar ) : Boolean

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

[+] def domainLambdas : List [ TypeLambda ]

The type lambdas constrained by this constraint

[+] def domainParams : List [ TypeParamRef ]

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.

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

lower(param) \ lower(butNot)

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

upper(param) \ upper(butNot)

[+] def forallParams ( p: TypeParamRef => Boolean ) : Boolean

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.

[+] def fullBounds ( param: TypeParamRef ) ( implicit ctx: Context ) : TypeBounds

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

[+] def fullUpperBound ( param: TypeParamRef ) ( implicit ctx: Context ) : Type

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?

[+] 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 fields set.

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

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

[+] def remove ( pt: TypeLambda ) ( implicit ctx: Context ) : This

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

[+] 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

[+] def uninstVars : Seq [ TypeVar ]

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
[+] def upper ( param: TypeParamRef ) : List [ TypeParamRef ]

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