Enum chalk_solve::solve::Guidance
source · pub enum Guidance<I: Interner> {
Definite(Canonical<Substitution<I>>),
Suggested(Canonical<Substitution<I>>),
Unknown,
}
Expand description
When a goal holds ambiguously (e.g., because there are multiple possible solutions), we issue a set of guidance back to type inference.
Variants§
Definite(Canonical<Substitution<I>>)
The existential variables must have the given values if the goal is ever to hold, but that alone isn’t enough to guarantee the goal will actually hold.
Suggested(Canonical<Substitution<I>>)
There are multiple plausible values for the existentials, but the ones here are suggested as the preferred choice heuristically. These should be used for inference fallback only.
Unknown
There’s no useful information to feed back to type inference
Trait Implementations§
source§impl<I: PartialEq + Interner> PartialEq<Guidance<I>> for Guidance<I>
impl<I: PartialEq + Interner> PartialEq<Guidance<I>> for Guidance<I>
impl<I: Eq + Interner> Eq for Guidance<I>
impl<I: Interner> StructuralEq for Guidance<I>
impl<I: Interner> StructuralPartialEq for Guidance<I>
Auto Trait Implementations§
impl<I> RefUnwindSafe for Guidance<I>where <I as Interner>::InternedCanonicalVarKinds: RefUnwindSafe, <I as Interner>::InternedSubstitution: RefUnwindSafe,
impl<I> Send for Guidance<I>where <I as Interner>::InternedCanonicalVarKinds: Send, <I as Interner>::InternedSubstitution: Send,
impl<I> Sync for Guidance<I>where <I as Interner>::InternedCanonicalVarKinds: Sync, <I as Interner>::InternedSubstitution: Sync,
impl<I> Unpin for Guidance<I>where <I as Interner>::InternedCanonicalVarKinds: Unpin, <I as Interner>::InternedSubstitution: Unpin,
impl<I> UnwindSafe for Guidance<I>where <I as Interner>::InternedCanonicalVarKinds: UnwindSafe, <I as Interner>::InternedSubstitution: UnwindSafe,
Blanket Implementations§
source§impl<T> Cast for T
impl<T> Cast for T
source§fn cast<U>(self, interner: <U as HasInterner>::Interner) -> Uwhere
Self: CastTo<U>,
U: HasInterner,
fn cast<U>(self, interner: <U as HasInterner>::Interner) -> Uwhere Self: CastTo<U>, U: HasInterner,
Cast a value to type
U
using CastTo
.source§impl<Q, K> Equivalent<K> for Qwhere
Q: Eq + ?Sized,
K: Borrow<Q> + ?Sized,
impl<Q, K> Equivalent<K> for Qwhere Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,
source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
Compare self to
key
and return true
if they are equal.