use std::rc::Rc; use crate::span::Spanned; #[derive(Clone, Debug, PartialEq)] pub enum Atom { Float(f64), Integer(i64), String(Rc), Symbol(Rc), Bool(bool), Nil, } #[derive(Clone, Debug, PartialEq)] pub enum Expr { Atom(Atom), List(Vec>), } #[derive(Clone, Debug, PartialEq)] pub struct Ast(Vec>); impl Ast { pub fn new(ast: Vec>) -> Self { Self(ast) } pub fn inner(&self) -> &[Spanned] { &self.0 } pub fn into_inner(self) -> Vec> { self.0 } }