pub trait TypeFoldable: TypeVisitable {
// Required method
fn try_fold_with<F: FallibleTypeFolder>(
&self,
folder: &mut F,
) -> Result<Self, F::Error>;
// Provided methods
fn fold_with<F: TypeFolder>(&self, folder: &mut F) -> Self { ... }
fn normalize_projections<'tcx>(
&self,
genv: GlobalEnv<'_, 'tcx>,
infcx: &InferCtxt<'tcx>,
callsite_def_id: DefId,
) -> QueryResult<Self> { ... }
fn normalize(&self, defns: &SpecFuncDefns) -> Self { ... }
fn replace_holes(
&self,
f: impl FnMut(&[BoundVariableKinds], HoleKind) -> Expr,
) -> Self { ... }
fn with_holes(&self) -> Self { ... }
fn replace_evars(&self, evars: &EVarSol) -> Self { ... }
fn shift_in_escaping(&self, amount: u32) -> Self { ... }
fn shift_out_escaping(&self, amount: u32) -> Self { ... }
fn erase_regions(&self) -> Self { ... }
}
Required Methods§
fn try_fold_with<F: FallibleTypeFolder>( &self, folder: &mut F, ) -> Result<Self, F::Error>
Provided Methods§
fn fold_with<F: TypeFolder>(&self, folder: &mut F) -> Self
fn normalize_projections<'tcx>( &self, genv: GlobalEnv<'_, 'tcx>, infcx: &InferCtxt<'tcx>, callsite_def_id: DefId, ) -> QueryResult<Self>
Sourcefn normalize(&self, defns: &SpecFuncDefns) -> Self
fn normalize(&self, defns: &SpecFuncDefns) -> Self
Normalize expressions by applying beta reductions for tuples and lambda abstractions.
Sourcefn replace_holes(
&self,
f: impl FnMut(&[BoundVariableKinds], HoleKind) -> Expr,
) -> Self
fn replace_holes( &self, f: impl FnMut(&[BoundVariableKinds], HoleKind) -> Expr, ) -> Self
Replaces all holes with the result of calling a closure. The closure takes a list with all the layers of bound variables at the point the hole was found. Each layer corresponds to the list of bound variables at that level. The list is ordered from outermost to innermost binder, i.e., the last element is the binder closest to the hole.
Sourcefn with_holes(&self) -> Self
fn with_holes(&self) -> Self
Remove all refinements and turn each underlying BaseTy
into a TyKind::Exists
with a
TyKind::Constr
and a hole
. For example, Vec<{v. i32[v] | v > 0}>[n]
becomes
{n. Vec<{v. i32[v] | *}>[n] | *}
.
fn replace_evars(&self, evars: &EVarSol) -> Self
fn shift_in_escaping(&self, amount: u32) -> Self
fn shift_out_escaping(&self, amount: u32) -> Self
fn erase_regions(&self) -> Self
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.