pub type TyKind = TyKind<Interner>;
Aliased Type§
enum TyKind {
Show 23 variants
Adt(AdtId<Interner>, Substitution<Interner>),
AssociatedType(AssocTypeId<Interner>, Substitution<Interner>),
Scalar(Scalar),
Tuple(usize, Substitution<Interner>),
Array(Ty<Interner>, Const<Interner>),
Slice(Ty<Interner>),
Raw(Mutability, Ty<Interner>),
Ref(Mutability, Lifetime<Interner>, Ty<Interner>),
OpaqueType(OpaqueTyId<Interner>, Substitution<Interner>),
FnDef(FnDefId<Interner>, Substitution<Interner>),
Str,
Never,
Closure(ClosureId<Interner>, Substitution<Interner>),
Coroutine(CoroutineId<Interner>, Substitution<Interner>),
CoroutineWitness(CoroutineId<Interner>, Substitution<Interner>),
Foreign(ForeignDefId<Interner>),
Error,
Placeholder(PlaceholderIndex),
Dyn(DynTy<Interner>),
Alias(AliasTy<Interner>),
Function(FnPointer<Interner>),
BoundVar(BoundVar),
InferenceVar(InferenceVar, TyVariableKind),
}
Variants§
Adt(AdtId<Interner>, Substitution<Interner>)
Abstract data types, i.e., structs, unions, or enumerations.
For example, a type like Vec<T>
.
AssociatedType(AssocTypeId<Interner>, Substitution<Interner>)
an associated type like Iterator::Item
; see AssociatedType
for details
Scalar(Scalar)
a scalar type like bool
or u32
Tuple(usize, Substitution<Interner>)
a tuple of the given arity
Array(Ty<Interner>, Const<Interner>)
an array type like [T; N]
Slice(Ty<Interner>)
a slice type like [T]
Raw(Mutability, Ty<Interner>)
a raw pointer type like *const T
or *mut T
Ref(Mutability, Lifetime<Interner>, Ty<Interner>)
a reference type like &T
or &mut T
OpaqueType(OpaqueTyId<Interner>, Substitution<Interner>)
a placeholder for opaque types like impl Trait
FnDef(FnDefId<Interner>, Substitution<Interner>)
a function definition
Str
the string primitive type
Never
the never type !
Closure(ClosureId<Interner>, Substitution<Interner>)
A closure.
Coroutine(CoroutineId<Interner>, Substitution<Interner>)
A coroutine.
CoroutineWitness(CoroutineId<Interner>, Substitution<Interner>)
A coroutine witness.
Foreign(ForeignDefId<Interner>)
foreign types
Error
This can be used to represent an error, e.g. during name resolution of a type. Chalk itself will not produce this, just pass it through when given.
Placeholder(PlaceholderIndex)
instantiated from a universally quantified type, e.g., from
forall<T> { .. }
. Stands in as a representative of “some
unknown type”.
Dyn(DynTy<Interner>)
A “dyn” type is a trait object type created via the “dyn Trait” syntax. In the chalk parser, the traits that the object represents is parsed as a QuantifiedInlineBound, and is then changed to a list of where clauses during lowering.
See the Opaque
variant for a discussion about the use of
binders here.
Alias(AliasTy<Interner>)
An “alias” type represents some form of type alias, such as:
- An associated type projection like
<T as Iterator>::Item
impl Trait
types- Named type aliases like
type Foo<X> = Vec<X>
Function(FnPointer<Interner>)
A function type such as for<'a> fn(&'a u32)
.
Note that “higher-ranked” types (starting with for<>
) are either
function types or dyn types, and do not appear otherwise in Rust
surface syntax.
BoundVar(BoundVar)
References the binding at the given depth. The index is a [de Bruijn index], so it counts back through the in-scope binders.
InferenceVar(InferenceVar, TyVariableKind)
Inference variable defined in the current inference context.