Reducer

dotty.tools.dotc.core.TypeApplications.Reducer
class Reducer(tycon: TypeLambda, args: List[Type])(using x$3: Context) extends TypeMap

A type map that tries to reduce (part of) the result type of the type lambda tycon with the given args(some of which are wildcard arguments represented by type bounds). Non-wildcard arguments are substituted everywhere as usual. A wildcard argument >: L <: H is substituted for a type lambda parameter X only under certain conditions.

  1. If Mode.AllowLambdaWildcardApply is set: The wildcard argument is substituted only if X appears in a toplevel application of the form

    C[..., X, ...]

and there are no other occurrences of X in the reduced type. In that case the refinement above is replaced by

  C[..., ? >: L <: H, ...]

The allReplaced field indicates whether all occurrences of type lambda parameters in the reduced type have been replaced with arguments.

  1. If Mode.AllowLambdaWildcardApply is not set: All X arguments are replaced by:

    ? >: L <: H

Any other occurrence of X in tycon is replaced by U, if the occurrence of X in tycon is covariant, or nonvariant, or by L, if the occurrence is contravariant.

The idea is that the AllowLambdaWildcardApply mode is used to check whether a type can be soundly reduced, and to give an error or warning if that is not the case. By contrast, the default mode, with AllowLambdaWildcardApply not set, reduces all applications even if this yields a different type, so its postcondition is that no type parameters of tycon appear in the result type. Using this mode, we can guarantee that appliedTo will never produce a higher-kinded application with a type lambda as type constructor.

Attributes

Graph
Supertypes
class TypeMap
trait Type => Type
class Object
trait Matchable
class Any
Show all

Members list

Value members

Concrete methods

def apply(t: Type): Type
def applyArg(arg: Type): Type
def atNestedLevel(op: => Type): Type

Inherited methods

def andThen(f: Type => Type): TypeMap

Attributes

Inherited from:
TypeMap
def andThen[A](g: Type => A): Type => A

Attributes

Inherited from:
Function1
inline protected def atVariance[T](v: Int)(op: => T): T

Attributes

Inherited from:
VariantTraversal
def compose[A](g: A => Type): A => Type

Attributes

Inherited from:
Function1
protected def derivedAlias(tp: AliasingBounds, alias: Type): Type

Attributes

Inherited from:
TypeMap
protected def derivedAndType(tp: AndType, tp1: Type, tp2: Type): Type

Attributes

Inherited from:
TypeMap
protected def derivedAnnotatedType(tp: AnnotatedType, underlying: Type, annot: Annotation): Type

Attributes

Inherited from:
TypeMap
protected def derivedAppliedType(tp: AppliedType, tycon: Type, args: List[Type]): Type

Attributes

Inherited from:
TypeMap
protected def derivedCapturingType(tp: Type, parent: Type, refs: CaptureSet): Type

Attributes

Inherited from:
TypeMap
protected def derivedClassInfo(tp: ClassInfo, pre: Type): Type

Attributes

Inherited from:
TypeMap
protected def derivedExprType(tp: ExprType, restpe: Type): Type

Attributes

Inherited from:
TypeMap
protected def derivedJavaArrayType(tp: JavaArrayType, elemtp: Type): Type

Attributes

Inherited from:
TypeMap
protected def derivedLambdaType(tp: LambdaType)(formals: List[tp.PInfo], restpe: Type): Type

Attributes

Inherited from:
TypeMap
protected def derivedMatchType(tp: MatchType, bound: Type, scrutinee: Type, cases: List[Type]): Type

Attributes

Inherited from:
TypeMap
protected def derivedOrType(tp: OrType, tp1: Type, tp2: Type): Type

Attributes

Inherited from:
TypeMap
protected def derivedRecType(tp: RecType, parent: Type): Type

Attributes

Inherited from:
TypeMap
protected def derivedRefinedType(tp: RefinedType, parent: Type, info: Type): Type

Attributes

Inherited from:
TypeMap
protected def derivedSelect(tp: NamedType, pre: Type): Type

Attributes

Inherited from:
TypeMap
protected def derivedSkolemType(tp: SkolemType, info: Type): Type

Attributes

Inherited from:
TypeMap
protected def derivedSuperType(tp: SuperType, thistp: Type, supertp: Type): Type

Attributes

Inherited from:
TypeMap
protected def derivedTypeBounds(tp: TypeBounds, lo: Type, hi: Type): Type

Attributes

Inherited from:
TypeMap
protected def derivedWildcardType(tp: WildcardType, bounds: Type): Type

Attributes

Inherited from:
TypeMap
def isRange(tp: Type): Boolean

Attributes

Inherited from:
TypeMap
protected def isStaticPrefix(pre: Type)(using Context): Boolean

Can the prefix of this static reference be omitted if the reference itself can be omitted? Overridden in TypeOps#avoid.

Can the prefix of this static reference be omitted if the reference itself can be omitted? Overridden in TypeOps#avoid.

Attributes

Inherited from:
VariantTraversal
protected def mapArg(arg: Type, tparam: ParamInfo): Type

Attributes

Inherited from:
TypeMap
protected def mapArgs(args: List[Type], tparams: List[ParamInfo]): List[Type]

Attributes

Inherited from:
TypeMap
protected def mapCapturingType(tp: Type, parent: Type, refs: CaptureSet, v: Int): Type

Attributes

Inherited from:
TypeMap
protected def mapClassInfo(tp: ClassInfo): Type

Can be overridden. By default, only the prefix is mapped.

Can be overridden. By default, only the prefix is mapped.

Attributes

Inherited from:
TypeMap
def mapOver(tree: Tree): Tree

Attributes

Inherited from:
TypeMap
def mapOver(scope: Scope): Scope

Attributes

Inherited from:
TypeMap
def mapOver(syms: List[Symbol]): List[Symbol]

Attributes

Inherited from:
TypeMap
def mapOver(tp: Type): Type

Map this function over given type

Map this function over given type

Attributes

Inherited from:
TypeMap
protected def mapOverLambda(tp: LambdaType): Type

Attributes

Inherited from:
TypeMap
protected def stopAt: StopAt

Attributes

Inherited from:
VariantTraversal
protected def stopBecauseStaticOrLocal(tp: NamedType)(using Context): Boolean

Attributes

Inherited from:
VariantTraversal
override def toString(): String

Returns a string representation of the object.

Returns a string representation of the object.

The default representation is platform dependent.

Attributes

Returns

a string representation of the object.

Definition Classes
Function1 -> Any
Inherited from:
Function1
protected def tyconTypeParams(tp: AppliedType)(using Context): List[ParamInfo]

The type parameters of the constructor of this applied type. Overridden in OrderingConstraint's ConstraintAwareTraversal to take account of instantiations in the constraint that are not yet propagated to the instance types of type variables.

The type parameters of the constructor of this applied type. Overridden in OrderingConstraint's ConstraintAwareTraversal to take account of instantiations in the constraint that are not yet propagated to the instance types of type variables.

Attributes

Inherited from:
VariantTraversal

Concrete fields

Implicits

Inherited implicits

implicit protected val mapCtx: Context

Attributes

Inherited from:
TypeMap