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(input: &Self::AST); fn compile(input: &Self::AST); }