pub enum Expr<T: Symbol = Arc<String>> {
Show 18 variants
Sym(T),
Var(Arc<String>),
Rel(Box<Expr<T>>, Box<Expr<T>>),
Ava(Box<Expr<T>>, Box<Expr<T>>),
Inner(Box<Expr<T>>),
UniqAva(Box<Expr<T>>),
RoleOf(Box<Expr<T>>, Box<Expr<T>>),
Eq(Box<Expr<T>>, Box<Expr<T>>),
Neq(Box<Expr<T>>, Box<Expr<T>>),
Has(Box<Expr<T>>, Box<Expr<T>>),
App(Box<Expr<T>>, Box<Expr<T>>),
AmbiguousRole(Box<Expr<T>>, Box<Expr<T>>, Box<Expr<T>>),
AmbiguousRel(Box<Expr<T>>, Box<Expr<T>>, Box<Expr<T>>),
Rule(Box<Expr<T>>, Vec<Expr<T>>),
Ambiguity(bool),
Tail,
TailVar(Arc<String>),
List(Vec<Expr<T>>),
}
Expand description
Represents an expression.
Variants§
Sym(T)
A symbol.
Var(Arc<String>)
A variable.
Rel(Box<Expr<T>>, Box<Expr<T>>)
A relation between two symbols.
Ava(Box<Expr<T>>, Box<Expr<T>>)
A 1-avatar of some expression.
Inner(Box<Expr<T>>)
Unwraps 1-avatar.
UniqAva(Box<Expr<T>>)
A 1-avatar q'(b)
such that p(a) = q'(b)
.
RoleOf(Box<Expr<T>>, Box<Expr<T>>)
A role of expression.
Eq(Box<Expr<T>>, Box<Expr<T>>)
An equality, e.g. p(a) = b
.
Neq(Box<Expr<T>>, Box<Expr<T>>)
An inequality, e.g. X != a
.
Has(Box<Expr<T>>, Box<Expr<T>>)
A set membership relation, e.g. p(a) ∋ b
.
App(Box<Expr<T>>, Box<Expr<T>>)
Apply an argument to a role, e.g. p(a)
.
AmbiguousRole(Box<Expr<T>>, Box<Expr<T>>, Box<Expr<T>>)
There is an ambiguous role.
AmbiguousRel(Box<Expr<T>>, Box<Expr<T>>, Box<Expr<T>>)
There is an ambiguous relation.
Rule(Box<Expr<T>>, Vec<Expr<T>>)
Defines a rule.
Ambiguity(bool)
Ambiguity summary.
This is true
when some ambiguity is found,
and false
when no ambiguity is found.
Tail
Represents the tail of an argument list ..
.
TailVar(Arc<String>)
Represents the tail of an argument list bound a symbol ..x
.
List(Vec<Expr<T>>)
Represents a list.
Implementations§
Trait Implementations§
source§impl<T: Ord + Symbol> Ord for Expr<T>
impl<T: Ord + Symbol> Ord for Expr<T>
source§impl<T: PartialEq + Symbol> PartialEq for Expr<T>
impl<T: PartialEq + Symbol> PartialEq for Expr<T>
source§impl<T: PartialOrd + Symbol> PartialOrd for Expr<T>
impl<T: PartialOrd + Symbol> PartialOrd for Expr<T>
1.0.0 · source§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for
self
and other
) and is used by the <=
operator. Read moreimpl<T: Eq + Symbol> Eq for Expr<T>
impl<T: Symbol> StructuralPartialEq for Expr<T>
Auto Trait Implementations§
impl<T> Freeze for Expr<T>where
T: Freeze,
impl<T> RefUnwindSafe for Expr<T>where
T: RefUnwindSafe,
impl<T> Send for Expr<T>where
T: Send,
impl<T> Sync for Expr<T>where
T: Sync,
impl<T> Unpin for Expr<T>where
T: Unpin,
impl<T> UnwindSafe for Expr<T>where
T: UnwindSafe,
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more