[][src]Struct chalk_ir::Goal

pub struct Goal<I: Interner> { /* fields omitted */ }

A general goal; this is the full range of questions you can pose to Chalk.

Implementations

impl<I: Interner> Goal<I>[src]

pub fn new(interner: &I, interned: GoalData<I>) -> Self[src]

Create a new goal using GoalData.

pub fn interned(&self) -> &I::InternedGoal[src]

Gets the interned goal.

pub fn data(&self, interner: &I) -> &GoalData<I>[src]

Gets the interned goal data.

pub fn quantify(
    self,
    interner: &I,
    kind: QuantifierKind,
    binders: VariableKinds<I>
) -> Goal<I>
[src]

Create a goal using a forall or exists quantifier.

pub fn negate(self, interner: &I) -> Self[src]

Takes a goal G and turns it into not { G }.

pub fn compatible(self, interner: &I) -> Self[src]

Takes a goal G and turns it into compatible { G }.

pub fn implied_by(self, interner: &I, predicates: ProgramClauses<I>) -> Goal<I>[src]

Create an implication goal that holds if the predicates are true.

pub fn is_trivially_true(&self, interner: &I) -> bool[src]

True if this goal is "trivially true" -- i.e., no work is required to prove it.

impl<I> Goal<I> where
    I: Interner
[src]

pub fn all<II>(interner: &I, iter: II) -> Self where
    II: IntoIterator<Item = Goal<I>>, 
[src]

Creates a single goal that only holds if a list of goals holds.

Trait Implementations

impl<I: Interner> CastTo<Goal<I>> for Goal<I>[src]

impl<T, I: Interner> CastTo<Goal<I>> for T where
    T: CastTo<DomainGoal<I>>, 
[src]

impl<I: Interner> CastTo<Goal<I>> for EqGoal<I>[src]

impl<I: Interner> CastTo<Goal<I>> for SubtypeGoal<I>[src]

impl<I: Interner, T: HasInterner<Interner = I> + CastTo<Goal<I>>> CastTo<Goal<I>> for Binders<T>[src]

impl<I: Clone + Interner> Clone for Goal<I> where
    I::InternedGoal: Clone
[src]

impl<I: Copy + Interner> Copy for Goal<I> where
    I::InternedGoal: Copy
[src]

impl<I: Interner> Debug for Goal<I>[src]

impl<I: Eq + Interner> Eq for Goal<I> where
    I::InternedGoal: Eq
[src]

impl<I: Interner> Fold<I> for Goal<I>[src]

Folding a goal invokes the fold_goal callback (which will, by default, invoke super-fold).

type Result = Goal<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

impl<I: Interner> HasInterner for Goal<I>[src]

type Interner = I

The interner associated with the type.

impl<I: Hash + Interner> Hash for Goal<I> where
    I::InternedGoal: Hash
[src]

impl<I: Ord + Interner> Ord for Goal<I> where
    I::InternedGoal: Ord
[src]

impl<I: PartialEq + Interner> PartialEq<Goal<I>> for Goal<I> where
    I::InternedGoal: PartialEq
[src]

impl<I: PartialOrd + Interner> PartialOrd<Goal<I>> for Goal<I> where
    I::InternedGoal: PartialOrd
[src]

impl<I: Interner> StructuralEq for Goal<I>[src]

impl<I: Interner> StructuralPartialEq for Goal<I>[src]

impl<I: Interner> SuperFold<I> for Goal<I>[src]

Superfold folds recursively.

impl<I: Interner> SuperVisit<I> for Goal<I>[src]

impl<I: Interner> Visit<I> for Goal<I>[src]

impl<I: Interner> Zip<I> for Goal<I>[src]

Auto Trait Implementations

impl<I> RefUnwindSafe for Goal<I> where
    <I as Interner>::InternedGoal: RefUnwindSafe

impl<I> Send for Goal<I> where
    <I as Interner>::InternedGoal: Send

impl<I> Sync for Goal<I> where
    <I as Interner>::InternedGoal: Sync

impl<I> Unpin for Goal<I> where
    <I as Interner>::InternedGoal: Unpin

impl<I> UnwindSafe for Goal<I> where
    <I as Interner>::InternedGoal: UnwindSafe

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> Cast for T[src]

impl<T, I> CastTo<Goal<I>> for T where
    I: Interner,
    T: CastTo<DomainGoal<I>>, 
[src]

impl<T, I> CastTo<Goal<I>> for T where
    I: Interner,
    T: CastTo<DomainGoal<I>>, 
[src]

impl<T, I> CastTo<Goal<I>> for T where
    I: Interner,
    T: CastTo<DomainGoal<I>>, 
[src]

impl<T, I> CastTo<Goal<I>> for T where
    I: Interner,
    T: CastTo<DomainGoal<I>>, 
[src]

impl<T, I> CastTo<Goal<I>> for T where
    I: Interner,
    T: CastTo<DomainGoal<I>>, 
[src]

impl<T, I> CastTo<Goal<I>> for T where
    I: Interner,
    T: CastTo<DomainGoal<I>>, 
[src]

impl<T, I> CastTo<Goal<I>> for T where
    I: Interner,
    T: CastTo<DomainGoal<I>>, 
[src]

impl<T, I> CastTo<Goal<I>> for T where
    I: Interner,
    T: CastTo<DomainGoal<I>>, 
[src]

impl<T, I> CouldMatch<T> for T where
    I: Interner,
    T: Zip<I> + HasInterner<Interner = I> + ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T, I> Shift<I> for T where
    I: Interner,
    T: Fold<I>, 
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

impl<T, I> VisitExt<I> for T where
    I: Interner,
    T: Visit<I>, 
[src]