pub trait Arg: Any {
// Required methods
fn srepr(&self) -> String;
fn clone_arg(&self) -> Box<dyn Arg>;
// Provided methods
fn as_expr(&self) -> Option<Box<dyn Expr>> { ... }
fn map_expr(&self, f: &dyn Fn(&dyn Expr) -> Box<dyn Expr>) -> Box<dyn Arg> { ... }
}