Enum chalk_solve::solve::Solution [−][src]
pub enum Solution<I: Interner> { Unique(Canonical<ConstrainedSubst<I>>), Ambig(Guidance<I>), }
Expand description
A (possible) solution for a proposed goal.
Variants
The goal indeed holds, and there is a unique value for all existential variables. In this case, we also record a set of lifetime constraints which must also hold for the goal to be valid.
Tuple Fields of Unique
0: Canonical<ConstrainedSubst<I>>
The goal may be provable in multiple ways, but regardless we may have some guidance for type inference. In this case, we don’t return any lifetime constraints, since we have not “committed” to any particular solution yet.
Tuple Fields of Ambig
0: Guidance<I>
Implementations
There are multiple candidate solutions, which may or may not agree on the values for existential variables; attempt to combine them. This operation does not depend on the order of its arguments.
View this solution purely in terms of type inference guidance
Extract a constrained substitution from this solution, even if ambiguous.
Determine whether this solution contains type information that must hold, and returns the subst in that case.
Trait Implementations
Auto Trait Implementations
impl<I> RefUnwindSafe for Solution<I> where
<I as Interner>::InternedCanonicalVarKinds: RefUnwindSafe,
<I as Interner>::InternedConstraints: RefUnwindSafe,
<I as Interner>::InternedSubstitution: RefUnwindSafe,
impl<I> Send for Solution<I> where
<I as Interner>::InternedCanonicalVarKinds: Send,
<I as Interner>::InternedConstraints: Send,
<I as Interner>::InternedSubstitution: Send,
impl<I> Sync for Solution<I> where
<I as Interner>::InternedCanonicalVarKinds: Sync,
<I as Interner>::InternedConstraints: Sync,
<I as Interner>::InternedSubstitution: Sync,
impl<I> Unpin for Solution<I> where
<I as Interner>::InternedCanonicalVarKinds: Unpin,
<I as Interner>::InternedConstraints: Unpin,
<I as Interner>::InternedSubstitution: Unpin,
impl<I> UnwindSafe for Solution<I> where
<I as Interner>::InternedCanonicalVarKinds: UnwindSafe,
<I as Interner>::InternedConstraints: UnwindSafe,
<I as Interner>::InternedSubstitution: UnwindSafe,
Blanket Implementations
Mutably borrows from an owned value. Read more
fn cast<U>(self, interner: &<U as HasInterner>::Interner) -> U where
Self: CastTo<U>,
U: HasInterner,
fn cast<U>(self, interner: &<U as HasInterner>::Interner) -> U where
Self: CastTo<U>,
U: HasInterner,
Cast a value to type U
using CastTo
.
Compare self to key
and return true
if they are equal.
Instruments this type with the provided Span
, returning an
Instrumented
wrapper. Read more