rustc_type_ir::fold

Trait TypeFoldable

Source
pub trait TypeFoldable<I: Interner>: TypeVisitable<I> {
    // Required method
    fn try_fold_with<F: FallibleTypeFolder<I>>(
        self,
        folder: &mut F,
    ) -> Result<Self, F::Error>;

    // Provided method
    fn fold_with<F: TypeFolder<I>>(self, folder: &mut F) -> Self { ... }
}
Expand description

This trait is implemented for every type that can be folded, providing the skeleton of the traversal.

To implement this conveniently, use the derive macro located in rustc_macros.

This trait is a sub-trait of TypeVisitable. This is because many TypeFolder instances use the methods in TypeVisitableExt while folding, which means in practice almost every foldable type needs to also be visitable. (However, there are some types that are visitable without being foldable.)

Required Methods§

Source

fn try_fold_with<F: FallibleTypeFolder<I>>( self, folder: &mut F, ) -> Result<Self, F::Error>

The entry point for folding. To fold a value t with a folder f call: t.try_fold_with(f).

For most types, this just traverses the value, calling try_fold_with on each field/element.

For types of interest (such as Ty), the implementation of this method calls a folder method specifically for that type (such as F::try_fold_ty). This is where control transfers from TypeFoldable to TypeFolder.

Provided Methods§

Source

fn fold_with<F: TypeFolder<I>>(self, folder: &mut F) -> Self

A convenient alternative to try_fold_with for use with infallible folders. Do not override this method, to ensure coherence with try_fold_with.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl<I: Interner> TypeFoldable<I> for bool

Source§

fn try_fold_with<F: FallibleTypeFolder<I>>( self, _: &mut F, ) -> Result<Self, F::Error>

Source§

fn fold_with<F: TypeFolder<I>>(self, _: &mut F) -> Self

Source§

impl<I: Interner> TypeFoldable<I> for u16

Source§

fn try_fold_with<F: FallibleTypeFolder<I>>( self, _: &mut F, ) -> Result<Self, F::Error>

Source§

fn fold_with<F: TypeFolder<I>>(self, _: &mut F) -> Self

Source§

impl<I: Interner> TypeFoldable<I> for u32

Source§

fn try_fold_with<F: FallibleTypeFolder<I>>( self, _: &mut F, ) -> Result<Self, F::Error>

Source§

fn fold_with<F: TypeFolder<I>>(self, _: &mut F) -> Self

Source§

impl<I: Interner> TypeFoldable<I> for u64

Source§

fn try_fold_with<F: FallibleTypeFolder<I>>( self, _: &mut F, ) -> Result<Self, F::Error>

Source§

fn fold_with<F: TypeFolder<I>>(self, _: &mut F) -> Self

Source§

impl<I: Interner> TypeFoldable<I> for ()

Source§

fn try_fold_with<F: FallibleTypeFolder<I>>( self, _: &mut F, ) -> Result<Self, F::Error>

Source§

fn fold_with<F: TypeFolder<I>>(self, _: &mut F) -> Self

Source§

impl<I: Interner> TypeFoldable<I> for usize

Source§

fn try_fold_with<F: FallibleTypeFolder<I>>( self, _: &mut F, ) -> Result<Self, F::Error>

Source§

fn fold_with<F: TypeFolder<I>>(self, _: &mut F) -> Self

Source§

impl<I: Interner> TypeFoldable<I> for String

Source§

fn try_fold_with<F: FallibleTypeFolder<I>>( self, _: &mut F, ) -> Result<Self, F::Error>

Source§

fn fold_with<F: TypeFolder<I>>(self, _: &mut F) -> Self

Source§

impl<I: Interner> TypeFoldable<I> for Movability

Source§

fn try_fold_with<F: FallibleTypeFolder<I>>( self, _: &mut F, ) -> Result<Self, F::Error>

Source§

fn fold_with<F: TypeFolder<I>>(self, _: &mut F) -> Self

Source§

impl<I: Interner> TypeFoldable<I> for Mutability

Source§

fn try_fold_with<F: FallibleTypeFolder<I>>( self, _: &mut F, ) -> Result<Self, F::Error>

Source§

fn fold_with<F: TypeFolder<I>>(self, _: &mut F) -> Self

Source§

impl<I: Interner, A: TypeFoldable<I>, B: TypeFoldable<I>, C: TypeFoldable<I>> TypeFoldable<I> for (A, B, C)

Source§

impl<I: Interner, T: TypeFoldable<I>> TypeFoldable<I> for Option<T>

Source§

fn try_fold_with<F: FallibleTypeFolder<I>>( self, folder: &mut F, ) -> Result<Self, F::Error>

Source§

impl<I: Interner, T: TypeFoldable<I>> TypeFoldable<I> for Box<[T]>

Source§

fn try_fold_with<F: FallibleTypeFolder<I>>( self, folder: &mut F, ) -> Result<Self, F::Error>

Source§

impl<I: Interner, T: TypeFoldable<I>> TypeFoldable<I> for Box<T>

Source§

fn try_fold_with<F: FallibleTypeFolder<I>>( self, folder: &mut F, ) -> Result<Self, F::Error>

Source§

impl<I: Interner, T: TypeFoldable<I>> TypeFoldable<I> for Vec<T>

Source§

fn try_fold_with<F: FallibleTypeFolder<I>>( self, folder: &mut F, ) -> Result<Self, F::Error>

Source§

impl<I: Interner, T: TypeFoldable<I>> TypeFoldable<I> for ThinVec<T>

Source§

fn try_fold_with<F: FallibleTypeFolder<I>>( self, folder: &mut F, ) -> Result<Self, F::Error>

Source§

impl<I: Interner, T: TypeFoldable<I>, E: TypeFoldable<I>> TypeFoldable<I> for Result<T, E>

Source§

fn try_fold_with<F: FallibleTypeFolder<I>>( self, folder: &mut F, ) -> Result<Self, F::Error>

Source§

impl<I: Interner, T: TypeFoldable<I>, Ix: Idx> TypeFoldable<I> for IndexVec<Ix, T>

Source§

fn try_fold_with<F: FallibleTypeFolder<I>>( self, folder: &mut F, ) -> Result<Self, F::Error>

Source§

impl<I: Interner, T: TypeFoldable<I>, U: TypeFoldable<I>> TypeFoldable<I> for (T, U)

Implementors§

Source§

impl<I> TypeFoldable<I> for CanonicalTyVarKind
where I: Interner,

Source§

impl<I> TypeFoldable<I> for CanonicalVarKind<I>

Source§

impl<I> TypeFoldable<I> for ExistentialPredicate<I>

Source§

impl<I> TypeFoldable<I> for ClauseKind<I>

Source§

impl<I> TypeFoldable<I> for PredicateKind<I>

Source§

impl<I> TypeFoldable<I> for ProbeKind<I>

Source§

impl<I> TypeFoldable<I> for CanonicalVarInfo<I>

Source§

impl<I> TypeFoldable<I> for CanonicalVarValues<I>

Source§

impl<I> TypeFoldable<I> for UnevaluatedConst<I>

Source§

impl<I> TypeFoldable<I> for OpaqueTypeKey<I>

Source§

impl<I> TypeFoldable<I> for AliasTerm<I>

Source§

impl<I> TypeFoldable<I> for CoercePredicate<I>
where I: Interner, I::Ty: TypeFoldable<I>,

Source§

impl<I> TypeFoldable<I> for ExistentialProjection<I>

Source§

impl<I> TypeFoldable<I> for ExistentialTraitRef<I>

Source§

impl<I> TypeFoldable<I> for HostEffectPredicate<I>
where I: Interner, TraitRef<I>: TypeFoldable<I>,

Source§

impl<I> TypeFoldable<I> for NormalizesTo<I>
where I: Interner, AliasTerm<I>: TypeFoldable<I>, I::Term: TypeFoldable<I>,

Source§

impl<I> TypeFoldable<I> for ProjectionPredicate<I>
where I: Interner, AliasTerm<I>: TypeFoldable<I>, I::Term: TypeFoldable<I>,

Source§

impl<I> TypeFoldable<I> for SubtypePredicate<I>
where I: Interner, I::Ty: TypeFoldable<I>,

Source§

impl<I> TypeFoldable<I> for TraitPredicate<I>
where I: Interner, TraitRef<I>: TypeFoldable<I>,

Source§

impl<I> TypeFoldable<I> for TraitRef<I>

Source§

impl<I> TypeFoldable<I> for ExternalConstraintsData<I>

Source§

impl<I> TypeFoldable<I> for NestedNormalizationGoals<I>
where I: Interner, Vec<(GoalSource, Goal<I, I::Predicate>)>: TypeFoldable<I>,

Source§

impl<I> TypeFoldable<I> for PredefinedOpaquesData<I>
where I: Interner, Vec<(OpaqueTypeKey<I>, I::Ty)>: TypeFoldable<I>,

Source§

impl<I> TypeFoldable<I> for Response<I>

Source§

impl<I> TypeFoldable<I> for ClosureArgs<I>

Source§

impl<I> TypeFoldable<I> for CoroutineArgs<I>

Source§

impl<I> TypeFoldable<I> for CoroutineClosureArgs<I>

Source§

impl<I> TypeFoldable<I> for CoroutineClosureSignature<I>
where I: Interner, I::Ty: TypeFoldable<I>,

Source§

impl<I> TypeFoldable<I> for GenSig<I>
where I: Interner, I::Ty: TypeFoldable<I>,

Source§

impl<I> TypeFoldable<I> for AliasTy<I>

Source§

impl<I> TypeFoldable<I> for FnHeader<I>
where I: Interner, I::Safety: TypeFoldable<I>, I::Abi: TypeFoldable<I>,

Source§

impl<I> TypeFoldable<I> for FnSig<I>
where I: Interner, I::Tys: TypeFoldable<I>,

Source§

impl<I> TypeFoldable<I> for FnSigTys<I>
where I: Interner, I::Tys: TypeFoldable<I>,

Source§

impl<I> TypeFoldable<I> for TypeAndMut<I>
where I: Interner, I::Ty: TypeFoldable<I>,

Source§

impl<I, A> TypeFoldable<I> for OutlivesPredicate<I, A>
where I: Interner, A: TypeFoldable<I>, I::Region: TypeFoldable<I>,

Source§

impl<I, P> TypeFoldable<I> for Goal<I, P>
where I: Interner, I::ParamEnv: TypeFoldable<I>, P: TypeFoldable<I>,

Source§

impl<I, P> TypeFoldable<I> for QueryInput<I, P>

Source§

impl<I, T> TypeFoldable<I> for State<I, T>

Source§

impl<I, V> TypeFoldable<I> for Canonical<I, V>

Source§

impl<I: Interner> TypeFoldable<I> for Variance

Source§

impl<I: Interner> TypeFoldable<I> for BoundConstness

Source§

impl<I: Interner> TypeFoldable<I> for PredicatePolarity

Source§

impl<I: Interner> TypeFoldable<I> for AliasRelationDirection

Source§

impl<I: Interner> TypeFoldable<I> for BuiltinImplSource

Source§

impl<I: Interner> TypeFoldable<I> for Certainty

Source§

impl<I: Interner> TypeFoldable<I> for GoalSource

Source§

impl<I: Interner> TypeFoldable<I> for MaybeCause

Source§

impl<I: Interner> TypeFoldable<I> for AliasTyKind

Source§

impl<I: Interner> TypeFoldable<I> for FloatTy

Source§

impl<I: Interner> TypeFoldable<I> for InferTy

Source§

impl<I: Interner> TypeFoldable<I> for IntVarValue

Source§

impl<I: Interner> TypeFoldable<I> for RegionVid

Source§

impl<I: Interner> TypeFoldable<I> for NoSolution

Source§

impl<I: Interner> TypeFoldable<I> for DebruijnIndex

Source§

impl<I: Interner> TypeFoldable<I> for UniverseIndex

Source§

impl<I: Interner, T> !TypeFoldable<I> for EarlyBinder<I, T>

For early binders, you should first call instantiate before using any visitors.

Source§

impl<I: Interner, T: TypeFoldable<I>> TypeFoldable<I> for Binder<I, T>

Source§

impl<I: Interner, T: TypeFoldable<I>> TypeFoldable<I> for Lrc<T>

Source§

impl<T, I> TypeFoldable<I> for ExpectedFound<T>
where I: Interner, T: TypeFoldable<I>,

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for PointerKind<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for ExpectedSig<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for ValuePairs<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for GenericKind<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for VerifyBound<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for VerifyIfEq<'tcx>

impl<'tcx, O: TypeFoldable<TyCtxt<'tcx>>> TypeFoldable<TyCtxt<'tcx>> for Obligation<'tcx, O>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for &'tcx List<Const<'tcx>>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for &'tcx List<Ty<'tcx>>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for &'tcx List<LocalDefId>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for &'tcx List<PlaceElem<'tcx>>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for &'tcx List<PolyExistentialPredicate<'tcx>>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for &'tcx [InlineAsmTemplatePiece]

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for &'tcx [Span]

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for ByRef

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Res

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for CoroutineKind

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for MatchSource

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for PlaceBase

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for ProjectionKind

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Certainty

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Const<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for ConstValue<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for CovTerm

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for CoverageKind

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for MappingKind

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Op

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for BindingForm<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for LocalInfo<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for MentionedItem<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for VarDebugInfoContents<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for ErrorHandled

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Scalar

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for ConstraintCategory<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for ReturnConstraint

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for AggregateKind<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for BinOp

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for BorrowKind

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for CallSource

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for CastKind

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for FakeReadCause

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for InlineAsmMacro

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for InlineAsmOperand<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for MirPhase

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for NonDivergingIntrinsic<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for NullOp<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Operand<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for RetagKind

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Rvalue<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for StatementKind<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for TerminatorKind<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for UnOp

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for UnwindAction

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for IsConstable

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for ObligationCauseCode<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for WellFormedLoc

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for OutlivesBound<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for OverflowError

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for CastKind

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Adjust

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for AutoBorrow

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for PointerCoercion

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for AdtKind

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for AssocKind

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for BorrowKind

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for UpvarCapture

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for ExprKind

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for ValTree<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Asyncness

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for ClosureKind

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for ImplSubject<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for InferConst

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for InstanceKind<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for ReifyReason

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for PatternKind<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for BoundRegionKind

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Reveal

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for UpvarArgs<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for UserType<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for FieldIdx

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for VariantIdx

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Size

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for InlineAsmOptions

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for NodeId

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for HirId

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Place<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Projection<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for QueryRegionConstraints<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for MemberConstraint<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Scope

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for BasicBlocks<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Cache

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for UnevaluatedConst<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for BlockMarkerId

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for BranchSpan

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for ConditionId

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for ConditionInfo

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for CounterId

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for CoverageInfoHi

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for DecisionInfo

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Expression

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for ExpressionId

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for MCDCBranchSpan

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for MCDCDecisionSpan

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Mapping

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for SourceRegion

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for CtfeProvenance

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for AllocId

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for GlobalId<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for CoroutineLayout<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for CoroutineSavedTy<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Statement<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for BasicBlock

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for BasicBlockData<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for BlockTailInfo

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Body<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for CoroutineInfo<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Local

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for LocalDecl<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for MirSource<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Promoted

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for SourceInfo

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for SourceScope

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for SourceScopeData<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for UserTypeProjection

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for VarDebugInfo<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for VarDebugInfoFragment<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for ConstOperand<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for CopyNonOverlapping<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Place<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for SwitchTargets

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for PlaceTy<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Terminator<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for DropckOutlivesResult<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for NormalizationResult<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for AscribeUserType<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for DropckOutlives<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Eq<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for ImpliedOutlivesBounds<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for ProvePredicate<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Subtype<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for ExternalConstraints<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for PredefinedOpaques<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for DerivedCause<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for IfExpressionCause<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for ImplDerivedCause<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for InternedObligationCauseCode<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for MatchExpressionArmCause<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for ObligationCause<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for UnifyReceiverContext<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Adjustment<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for OverloadedDeref

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for AssocItem

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for CaptureInfo

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for CapturedPlace<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for UpvarId

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for UpvarPath

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Expr<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Const<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for GenericArg<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for UserArgs<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for UserSelfTy<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Instance<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Pattern<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Clause<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Predicate<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for TraitRefPrintOnlyTraitName<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for TraitRefPrintOnlyTraitPath<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for TraitRefPrintSugared<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for BoundRegion

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for LateParamRegion

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Region<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for BoundVar

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for ClosureSizeProfileData<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for ImplHeader<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for InstantiatedPredicates<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for OpaqueHiddenType<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for ParamEnv<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Placeholder<BoundVar>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Placeholder<BoundTy>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Term<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Ty<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for ParamConst

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for ParamTy

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for CanonicalUserTypeAnnotation<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for DefId

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for LocalDefId

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Span

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for ErrorGuaranteed

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Ident

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Symbol

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for CanonicalVarInfos<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for GenericArgsRef<'tcx>

impl<'tcx> TypeFoldable<TyCtxt<'tcx>> for Clauses<'tcx>

impl<'tcx, N> TypeFoldable<TyCtxt<'tcx>> for ImplSource<'tcx, N>
where N: TypeFoldable<TyCtxt<'tcx>>,

impl<'tcx, N> TypeFoldable<TyCtxt<'tcx>> for ImplSourceUserDefinedData<'tcx, N>
where N: TypeFoldable<TyCtxt<'tcx>>,

impl<'tcx, O> TypeFoldable<TyCtxt<'tcx>> for AssertKind<O>
where O: TypeFoldable<TyCtxt<'tcx>>,

impl<'tcx, R> TypeFoldable<TyCtxt<'tcx>> for QueryResponse<'tcx, R>
where R: TypeFoldable<TyCtxt<'tcx>>,

impl<'tcx, T> TypeFoldable<TyCtxt<'tcx>> for ClearCrossCrate<T>
where T: TypeFoldable<TyCtxt<'tcx>>,

impl<'tcx, T> TypeFoldable<TyCtxt<'tcx>> for Normalize<T>
where T: TypeFoldable<TyCtxt<'tcx>>,

impl<'tcx, T> TypeFoldable<TyCtxt<'tcx>> for ParamEnvAnd<'tcx, T>
where T: TypeFoldable<TyCtxt<'tcx>>,

impl<'tcx, T: TypeFoldable<TyCtxt<'tcx>> + Debug + Clone> TypeFoldable<TyCtxt<'tcx>> for Spanned<T>

impl<'tcx, V, T> TypeFoldable<TyCtxt<'tcx>> for ProjectionElem<V, T>
where T: TypeFoldable<TyCtxt<'tcx>>, V: TypeFoldable<TyCtxt<'tcx>>,

impl<I> TypeFoldable<I> for AsyncCallableRelevantTypes<I>
where I: Interner, I::Ty: TypeFoldable<I>,

impl<I> TypeFoldable<I> for NestedGoals<I>
where I: Interner, Vec<Goal<I, NormalizesTo<I>>>: TypeFoldable<I>, Vec<(GoalSource, Goal<I, I::Predicate>)>: TypeFoldable<I>,