#[derive(Clone, Debug)]
pub enum Expression<Real> {
Boolean(BoolExpression<Real>),
Real(RealExpression<Real>),
String(StringExpression),
}
#[derive(Clone, Debug)]
pub enum BoolExpression<Real> {
And(Box<BoolExpression<Real>>, Box<BoolExpression<Real>>),
Or(Box<BoolExpression<Real>>, Box<BoolExpression<Real>>),
Not(Box<BoolExpression<Real>>),
Equal(Box<RealExpression<Real>>, Box<RealExpression<Real>>),
Greater(Box<RealExpression<Real>>, Box<RealExpression<Real>>),
GreaterEqual(Box<RealExpression<Real>>, Box<RealExpression<Real>>),
Less(Box<RealExpression<Real>>, Box<RealExpression<Real>>),
LessEqual(Box<RealExpression<Real>>, Box<RealExpression<Real>>),
NotEqual(Box<RealExpression<Real>>, Box<RealExpression<Real>>),
StrEqual(StringExpression, StringExpression),
StrNotEqual(StringExpression, StringExpression),
}
#[derive(Clone, Debug)]
pub enum RealExpression<Real> {
Add(Box<RealExpression<Real>>, Box<RealExpression<Real>>),
Div(Box<RealExpression<Real>>, Box<RealExpression<Real>>),
Mul(Box<RealExpression<Real>>, Box<RealExpression<Real>>),
Pow(Box<RealExpression<Real>>, Box<RealExpression<Real>>),
Sub(Box<RealExpression<Real>>, Box<RealExpression<Real>>),
Neg(Box<RealExpression<Real>>),
Literal(Real),
Binding(BindingId),
}
#[derive(Clone, Debug)]
pub enum StringExpression {
Literal(String),
Binding(BindingId),
}
pub type BindingId = usize;