This module contains
TyKind and its major components.
Binder is a binder for higher-ranked lifetimes or types. It is part of the
compiler’s representation for things like
for<'a> Fn(&'a isize)
(which would be represented by the type
PolyTraitRef == Binder<'tcx, TraitRef>). Note that when we instantiate,
erase, or otherwise “discharge” these bound vars, we change the
Binder<'tcx, T> to just
A closure can be modeled as a struct that looks like:
Struct returned by
const variable ID.
ProjectionPredicate for an
An existential reference to a trait, where
Self is erased.
For example, the trait object
Trait<'a, 'b, X, Y> is:
Signature of a function type, which we have arbitrarily decided to use to refer to the input/output types.
A “free” region
fr can be interpreted as “some region
at least as big as the scope
ClosureSubsts; see the above documentation for more.
Represents the projection of an associated type. In explicit UFCS
form this would be written
<T as Trait<..>>::N.
A region (lifetime) variable ID.
A complete reference to a trait. These take numerous guises in syntax, but perhaps the most recognizable form is in a where-clause:
Representation of regions. Note that the NLL checker uses a distinct
representation of regions. For this reason, it internally replaces all the
regions with inference variables – the index of the variable is then used
to index into internal NLL data structures. See
module for more information.
Defines the kinds of types.
Extra information about why we ended up with a particular variance.
This is only used to add more information to error messages, and
has no effect on soundness. While choosing the ‘wrong’
may lead to confusing notes in error messages, it will never cause
a miscompilation or unsoundness.