use super::ExpressionTrait; #[derive(Debug, Clone, Eq, PartialEq)] pub enum Expression { Variable(usize), Abstraction(Box), Application(Box, Box), } impl ExpressionTrait for Expression { fn variable(index: usize) -> Self { Expression::Variable(index) } fn abstraction(body: Self) -> Self { Expression::Abstraction(Box::new(body)) } fn application(l: Self, r: Self) -> Self { Expression::Application(Box::new(l), Box::new(r)) } }