Enum chalk_ir::TyKind

source ·
pub enum TyKind<I: Interner> {
Show 23 variants Adt(AdtId<I>, Substitution<I>), AssociatedType(AssocTypeId<I>, Substitution<I>), Scalar(Scalar), Tuple(usizeSubstitution<I>), Array(Ty<I>, Const<I>), Slice(Ty<I>), Raw(MutabilityTy<I>), Ref(MutabilityLifetime<I>, Ty<I>), OpaqueType(OpaqueTyId<I>, Substitution<I>), FnDef(FnDefId<I>, Substitution<I>), Str, Never, Closure(ClosureId<I>, Substitution<I>), Generator(GeneratorId<I>, Substitution<I>), GeneratorWitness(GeneratorId<I>, Substitution<I>), Foreign(ForeignDefId<I>), Error, Placeholder(PlaceholderIndex), Dyn(DynTy<I>), Alias(AliasTy<I>), Function(FnPointer<I>), BoundVar(BoundVar), InferenceVar(InferenceVarTyVariableKind),
Expand description

Type data, which holds the actual type information.



Adt(AdtId<I>, Substitution<I>)

Abstract data types, i.e., structs, unions, or enumerations. For example, a type like Vec<T>.


AssociatedType(AssocTypeId<I>, Substitution<I>)

an associated type like Iterator::Item; see AssociatedType for details



a scalar type like bool or u32



a tuple of the given arity


Array(Ty<I>, Const<I>)

an array type like [T; N]



a slice type like [T]



a raw pointer type like *const T or *mut T


Ref(MutabilityLifetime<I>, Ty<I>)

a reference type like &T or &mut T


OpaqueType(OpaqueTyId<I>, Substitution<I>)

a placeholder for opaque types like impl Trait


FnDef(FnDefId<I>, Substitution<I>)

a function definition



the string primitive type



the never type !


Closure(ClosureId<I>, Substitution<I>)

A closure.


Generator(GeneratorId<I>, Substitution<I>)

A generator.


GeneratorWitness(GeneratorId<I>, Substitution<I>)

A generator witness.



foreign types



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.



instantiated from a universally quantified type, e.g., from forall<T> { .. }. Stands in as a representative of “some unknown type”.



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.



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>


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.



References the binding at the given depth. The index is a [de Bruijn index], so it counts back through the in-scope binders.



Inference variable defined in the current inference context.


Show debug output for the application type.

Casts the type data to a type.

Compute type flags for a TyKind

Trait Implementations§

Cast a value to type T.
Cast a value to type T.
Returns a copy of the value. Read more
Performs copy-assignment from source. Read more
Formats the value using the given formatter. Read more
The interner associated with the type.
Feeds this value into the given Hasher. Read more
Feeds a slice of this type into the given Hasher. Read more
This method tests for self and other values to be equal, and is used by ==.
This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.

Auto Trait Implementations§

Blanket Implementations§

Gets the TypeId of self. Read more
Immutably borrows from an owned value. Read more
Mutably borrows from an owned value. Read more
Cast a value to type U using CastTo.

Returns the argument unchanged.

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

The resulting type after obtaining ownership.
Creates owned data from borrowed data, usually by cloning. Read more
Uses borrowed data to replace owned data, usually by cloning. Read more
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.