use crate::{Clause, Expr, Tree};
pub trait Visit<'ast, F, P, O> {
fn visit_clause(&mut self, clause: &'ast Clause<F, P, O>) {
#[allow(clippy::drop_ref)]
std::mem::drop(clause);
}
fn visit_tree(&mut self, tree: &'ast Tree<Expr<F, P, O>>) {
for expr in tree.rules() {
self.visit_expr(expr);
}
}
fn visit_expr(&mut self, expr: &'ast Expr<F, P, O>) {
match expr {
Expr::Clause(clause) => self.visit_clause(clause),
Expr::Tree(tree) => self.visit_tree(tree),
}
}
}