[−][src]Enum chalk_ir::DomainGoal
A "domain goal" is a goal that is directly about Rust, rather than a pure logical statement. As much as possible, the Chalk solver should avoid decomposing this enum, and instead treat its values opaquely.
Variants
Holds(WhereClause<I>)
Simple goal that is true if the where clause is true.
WellFormed(WellFormed<I>)
True if the type or trait ref is well-formed.
FromEnv(FromEnv<I>)
True if the trait ref can be derived from in-scope where clauses.
Normalize(Normalize<I>)
True if the alias type can be normalized to some other type
IsLocal(Ty<I>)
True if a type is considered to have been "defined" by the current crate. This is true for
a struct Foo { }
but false for a #[upstream] struct Foo { }
. However, for fundamental types
like Box<T>
, it is true if T
is local.
IsUpstream(Ty<I>)
True if a type is not considered to have been "defined" by the current crate. This is
false for a struct Foo { }
but true for a #[upstream] struct Foo { }
. However, for
fundamental types like Box<T>
, it is true if T
is upstream.
IsFullyVisible(Ty<I>)
True if a type and its input types are fully visible, known types. That is, there are no unknown type parameters anywhere in this type.
More formally, for each struct S<P0..Pn>: forall<P0..Pn> { IsFullyVisible(S<P0...Pn>) :- IsFullyVisible(P0), ... IsFullyVisible(Pn) }
Note that any of these types can have lifetimes in their parameters too, but we only consider type parameters.
LocalImplAllowed(TraitRef<I>)
Used to dictate when trait impls are allowed in the current (local) crate based on the orphan rules.
LocalImplAllowed(T: Trait)
is true if the type T is allowed to impl trait Trait in
the current crate. Under the current rules, this is unconditionally true for all types if
the Trait is considered to be "defined" in the current crate. If that is not the case, then
LocalImplAllowed(T: Trait)
can still be true if IsLocal(T)
is true.
Used to activate the "compatible modality" rules. Rules that introduce predicates that have to do with "all compatible universes" should depend on this clause so that they only apply if this is present.
DownstreamType(Ty<I>)
Used to indicate that a given type is in a downstream crate. Downstream crates contain the current crate at some level of their dependencies.
Since chalk does not actually see downstream types, this is usually introduced with implication on a fresh, universally quantified type.
forall
This makes a new type T
available and makes DownstreamType(T)
provable for that type.
Used to activate the "reveal mode", in which opaque (impl Trait
) types can be equated
to their actual type.
ObjectSafe(TraitId<I>)
Used to indicate that a trait is object safe.
Implementations
impl<I: Interner> DomainGoal<I>
[src]
pub fn into_from_env_goal(self, interner: &I) -> DomainGoal<I>
[src]
Convert Implemented(...)
into FromEnv(...)
, but leave other
goals unchanged.
pub fn inputs(&self, interner: &I) -> Vec<GenericArg<I>>
[src]
Lists generic arguments that are inputs to this domain goal.
Trait Implementations
impl<I: Interner> CastTo<DomainGoal<I>> for DomainGoal<I>
[src]
pub fn cast_to(
self,
_interner: &<DomainGoal<I> as HasInterner>::Interner
) -> DomainGoal<I>
[src]
self,
_interner: &<DomainGoal<I> as HasInterner>::Interner
) -> DomainGoal<I>
impl<T, I> CastTo<DomainGoal<I>> for T where
T: CastTo<WhereClause<I>>,
I: Interner,
[src]
T: CastTo<WhereClause<I>>,
I: Interner,
pub fn cast_to(self, interner: &I) -> DomainGoal<I>
[src]
impl<I: Interner> CastTo<DomainGoal<I>> for Normalize<I>
[src]
pub fn cast_to(self, _interner: &I) -> DomainGoal<I>
[src]
impl<I: Interner> CastTo<DomainGoal<I>> for WellFormed<I>
[src]
pub fn cast_to(self, _interner: &I) -> DomainGoal<I>
[src]
impl<I: Interner> CastTo<DomainGoal<I>> for FromEnv<I>
[src]
pub fn cast_to(self, _interner: &I) -> DomainGoal<I>
[src]
impl<I: Clone + Interner> Clone for DomainGoal<I>
[src]
pub fn clone(&self) -> DomainGoal<I>
[src]
pub fn clone_from(&mut self, source: &Self)
1.0.0[src]
impl<I: Interner> Copy for DomainGoal<I> where
I::InternedSubstitution: Copy,
I::InternedLifetime: Copy,
I::InternedType: Copy,
[src]
I::InternedSubstitution: Copy,
I::InternedLifetime: Copy,
I::InternedType: Copy,
impl<I: Interner> CouldMatch<DomainGoal<I>> for ProgramClauseData<I>
[src]
pub fn could_match(
&self,
interner: &I,
db: &dyn UnificationDatabase<I>,
other: &DomainGoal<I>
) -> bool
[src]
&self,
interner: &I,
db: &dyn UnificationDatabase<I>,
other: &DomainGoal<I>
) -> bool
impl<I: Interner> CouldMatch<DomainGoal<I>> for ProgramClause<I>
[src]
pub fn could_match(
&self,
interner: &I,
db: &dyn UnificationDatabase<I>,
other: &DomainGoal<I>
) -> bool
[src]
&self,
interner: &I,
db: &dyn UnificationDatabase<I>,
other: &DomainGoal<I>
) -> bool
impl<I: Interner> Debug for DomainGoal<I>
[src]
impl<I: Eq + Interner> Eq for DomainGoal<I>
[src]
impl<I: Interner> Fold<I> for DomainGoal<I>
[src]
type Result = DomainGoal<I>
The type of value that will be produced once folding is done.
Typically this is Self
, unless Self
contains borrowed
values, in which case owned values are produced (for example,
one can fold over a &T
value where T: Fold
, in which case
you get back a T
, not a &T
). Read more
pub fn fold_with<'i>(
self,
folder: &mut dyn Folder<'i, I>,
outer_binder: DebruijnIndex
) -> Fallible<Self::Result> where
I: 'i,
[src]
self,
folder: &mut dyn Folder<'i, I>,
outer_binder: DebruijnIndex
) -> Fallible<Self::Result> where
I: 'i,
impl<I: Interner> HasInterner for DomainGoal<I>
[src]
type Interner = I
The interner associated with the type.
impl<I: Hash + Interner> Hash for DomainGoal<I>
[src]
pub fn hash<__H: Hasher>(&self, state: &mut __H)
[src]
pub fn hash_slice<H>(data: &[Self], state: &mut H) where
H: Hasher,
1.3.0[src]
H: Hasher,
impl<I: PartialEq + Interner> PartialEq<DomainGoal<I>> for DomainGoal<I>
[src]
pub fn eq(&self, other: &DomainGoal<I>) -> bool
[src]
pub fn ne(&self, other: &DomainGoal<I>) -> bool
[src]
impl<I: Interner> StructuralEq for DomainGoal<I>
[src]
impl<I: Interner> StructuralPartialEq for DomainGoal<I>
[src]
impl<I: Interner> SuperVisit<I> for DomainGoal<I>
[src]
pub fn super_visit_with<'i, B>(
&self,
visitor: &mut dyn Visitor<'i, I, BreakTy = B>,
outer_binder: DebruijnIndex
) -> ControlFlow<B> where
I: 'i,
[src]
&self,
visitor: &mut dyn Visitor<'i, I, BreakTy = B>,
outer_binder: DebruijnIndex
) -> ControlFlow<B> where
I: 'i,
impl<I: Interner> Visit<I> for DomainGoal<I>
[src]
pub fn visit_with<'i, B>(
&self,
visitor: &mut dyn Visitor<'i, I, BreakTy = B>,
outer_binder: DebruijnIndex
) -> ControlFlow<B> where
I: 'i,
[src]
&self,
visitor: &mut dyn Visitor<'i, I, BreakTy = B>,
outer_binder: DebruijnIndex
) -> ControlFlow<B> where
I: 'i,
impl<I: Interner> Zip<I> for DomainGoal<I>
[src]
Auto Trait Implementations
impl<I> RefUnwindSafe for DomainGoal<I> where
<I as Interner>::DefId: RefUnwindSafe,
<I as Interner>::InternedLifetime: RefUnwindSafe,
<I as Interner>::InternedSubstitution: RefUnwindSafe,
<I as Interner>::InternedType: RefUnwindSafe,
[src]
<I as Interner>::DefId: RefUnwindSafe,
<I as Interner>::InternedLifetime: RefUnwindSafe,
<I as Interner>::InternedSubstitution: RefUnwindSafe,
<I as Interner>::InternedType: RefUnwindSafe,
impl<I> Send for DomainGoal<I> where
<I as Interner>::DefId: Send,
<I as Interner>::InternedLifetime: Send,
<I as Interner>::InternedSubstitution: Send,
<I as Interner>::InternedType: Send,
[src]
<I as Interner>::DefId: Send,
<I as Interner>::InternedLifetime: Send,
<I as Interner>::InternedSubstitution: Send,
<I as Interner>::InternedType: Send,
impl<I> Sync for DomainGoal<I> where
<I as Interner>::DefId: Sync,
<I as Interner>::InternedLifetime: Sync,
<I as Interner>::InternedSubstitution: Sync,
<I as Interner>::InternedType: Sync,
[src]
<I as Interner>::DefId: Sync,
<I as Interner>::InternedLifetime: Sync,
<I as Interner>::InternedSubstitution: Sync,
<I as Interner>::InternedType: Sync,
impl<I> Unpin for DomainGoal<I> where
<I as Interner>::DefId: Unpin,
<I as Interner>::InternedLifetime: Unpin,
<I as Interner>::InternedSubstitution: Unpin,
<I as Interner>::InternedType: Unpin,
[src]
<I as Interner>::DefId: Unpin,
<I as Interner>::InternedLifetime: Unpin,
<I as Interner>::InternedSubstitution: Unpin,
<I as Interner>::InternedType: Unpin,
impl<I> UnwindSafe for DomainGoal<I> where
<I as Interner>::DefId: UnwindSafe,
<I as Interner>::InternedLifetime: UnwindSafe,
<I as Interner>::InternedSubstitution: UnwindSafe,
<I as Interner>::InternedType: UnwindSafe,
[src]
<I as Interner>::DefId: UnwindSafe,
<I as Interner>::InternedLifetime: UnwindSafe,
<I as Interner>::InternedSubstitution: UnwindSafe,
<I as Interner>::InternedType: UnwindSafe,
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> Cast for T
[src]
pub fn cast<U>(self, interner: &U::Interner) -> U where
Self: CastTo<U>,
U: HasInterner,
[src]
Self: CastTo<U>,
U: HasInterner,
impl<T, I> CastTo<DomainGoal<I>> for T where
T: CastTo<WhereClause<I>>,
I: Interner,
[src]
T: CastTo<WhereClause<I>>,
I: Interner,
pub fn cast_to(Self, &I) -> DomainGoal<I>
[src]
impl<T, I> CastTo<DomainGoal<I>> for T where
T: CastTo<WhereClause<I>>,
I: Interner,
[src]
T: CastTo<WhereClause<I>>,
I: Interner,
pub fn cast_to(Self, &I) -> DomainGoal<I>
[src]
impl<T, I> CastTo<DomainGoal<I>> for T where
T: CastTo<WhereClause<I>>,
I: Interner,
[src]
T: CastTo<WhereClause<I>>,
I: Interner,
pub fn cast_to(Self, &I) -> DomainGoal<I>
[src]
impl<T, I> CastTo<DomainGoal<I>> for T where
T: CastTo<WhereClause<I>>,
I: Interner,
[src]
T: CastTo<WhereClause<I>>,
I: Interner,
pub fn cast_to(Self, &I) -> DomainGoal<I>
[src]
impl<T, I> CastTo<Goal<I>> for T where
T: CastTo<DomainGoal<I>>,
I: Interner,
[src]
T: CastTo<DomainGoal<I>>,
I: Interner,
impl<T, I> CastTo<ProgramClause<I>> for T where
T: CastTo<DomainGoal<I>>,
I: Interner,
[src]
T: CastTo<DomainGoal<I>>,
I: Interner,
pub fn cast_to(Self, &I) -> ProgramClause<I>
[src]
impl<T, I> CouldMatch<T> for T where
T: Zip<I> + HasInterner<Interner = I> + ?Sized,
I: Interner,
[src]
T: Zip<I> + HasInterner<Interner = I> + ?Sized,
I: Interner,
pub fn could_match(&Self, &I, &dyn UnificationDatabase<I>, &T) -> bool
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T, I> Shift<I> for T where
T: Fold<I>,
I: Interner,
[src]
T: Fold<I>,
I: Interner,
pub fn shifted_in(Self, &I) -> <T as Fold<I>>::Result
[src]
pub fn shifted_in_from(Self, &I, DebruijnIndex) -> <T as Fold<I>>::Result
[src]
pub fn shifted_out_to(
Self,
&I,
DebruijnIndex
) -> Result<<T as Fold<I>>::Result, NoSolution>
[src]
Self,
&I,
DebruijnIndex
) -> Result<<T as Fold<I>>::Result, NoSolution>
pub fn shifted_out(Self, &I) -> Result<<T as Fold<I>>::Result, NoSolution>
[src]
impl<T> ToOwned for T where
T: Clone,
[src]
T: Clone,
type Owned = T
The resulting type after obtaining ownership.
pub fn to_owned(&self) -> T
[src]
pub fn clone_into(&self, target: &mut T)
[src]
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
pub fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
[src]
impl<T, I> VisitExt<I> for T where
T: Visit<I>,
I: Interner,
[src]
T: Visit<I>,
I: Interner,