use std::fmt::Debug; pub struct TokenError { pub msg: String, } pub struct ParseError { pub msg: String, } pub trait ProgrammingLanguage { type Token: Debug; type AST: Debug; fn tokenize(input: &str) -> Result, TokenError>; fn parse(input: Vec) -> Result; fn evaluate(ast: Self::AST, evaluator: &mut Evaluator) -> Vec; fn compile(ast: Self::AST) -> String; }