use rustyline::{error::ReadlineError, DefaultEditor}; mod env; mod error; mod evaluator; mod macros; mod node; mod parser; fn main() { let env = env::Environment::new(); let mut rl = DefaultEditor::new().unwrap(); println!("Mute -- REPL"); loop { let readline = rl.readline("> "); match readline { Ok(line) => { rl.add_history_entry(line.as_str()).unwrap(); let ast = parser::parse_str(&line).unwrap(); let res = evaluator::eval(&env, ast); match res { Ok(expressions) => expressions.into_iter().for_each(|expr| println!("{expr}")), Err(err) => println!("{}", err), } } Err(ReadlineError::Interrupted) => { continue; } Err(ReadlineError::Eof) => { break; } Err(err) => { println!("Error: {:?}", err); break; } } } }