use std::io::{self, Write}; mod evaluator; mod node; mod parser; fn main() { let env = evaluator::core_environment(); let mut input = String::new(); println!("Mute -- REPL"); loop { print!("> "); io::stdout().flush().expect("failed to write to stdout"); let bytes_read = io::stdin() .read_line(&mut input) .expect("failed to read from stdin"); if bytes_read == 0 { break; } let ast = parser::parse_str(&input).unwrap(); let res = evaluator::eval(env.clone(), ast); match res { Ok(expressions) => expressions.into_iter().for_each(|expr| println!("{expr}")), Err(err) => println!("{}", err.to_string()), } input.clear(); } }