use crate::expr::{Expr, Identifier};
use crate::func::Func;
#[derive(Clone, Debug, PartialEq)]
pub enum Command {
Del(Identifier), Update(Func), Eval(Expr), EvalLast(Expr), EvalHead(usize, Expr), EvalTail(usize, Expr), Search(Identifier), Context, Unlambda(u8, Expr), }
#[cfg(test)]
pub fn del<Id: Into<Identifier>>(id: Id) -> Command {
Command::Del(id.into())
}
#[cfg(test)]
pub fn update(func: Func) -> Command {
Command::Update(func)
}
#[cfg(test)]
pub fn eval<E: Into<Expr>>(expr: E) -> Command {
Command::Eval(expr.into())
}
#[cfg(test)]
pub fn eval_last<E: Into<Expr>>(expr: E) -> Command {
Command::EvalLast(expr.into())
}
#[cfg(test)]
pub fn eval_head<E: Into<Expr>>(n: usize, expr: E) -> Command {
Command::EvalHead(n, expr.into())
}
#[cfg(test)]
pub fn eval_tail<E: Into<Expr>>(n: usize, expr: E) -> Command {
Command::EvalTail(n, expr.into())
}
#[cfg(test)]
pub fn search<Id: Into<Identifier>>(id: Id) -> Command {
Command::Search(id.into())
}
#[cfg(test)]
pub fn context() -> Command {
Command::Context
}
#[cfg(test)]
pub fn unlambda<E: Into<Expr>>(level: u8, expr: E) -> Command {
Command::Unlambda(level, expr.into())
}