diff options
Diffstat (limited to 'rust/src/io.rs')
| -rw-r--r-- | rust/src/io.rs | 73 |
1 files changed, 0 insertions, 73 deletions
diff --git a/rust/src/io.rs b/rust/src/io.rs deleted file mode 100644 index 8c628ba..0000000 --- a/rust/src/io.rs +++ /dev/null @@ -1,73 +0,0 @@ -use std::{ - fs::read_to_string, - io::{BufRead, BufReader, Read, Write}, -}; - -use crate::{ - ast::Value, - lambda::{eval_all, eval_whnf, Environment}, - parser::parse, -}; - -pub fn eval_file(file_name: &str) -> String { - let content = read_to_string(file_name).unwrap(); - let values = parse(&content.to_string()); - eval_all(&values) - .iter() - .map(|v| v.to_string()) - .collect::<Vec<String>>() - .join(" ") -} - -pub fn batch_eval<I: Read, O: Write>(inp: &mut I, outp: &mut O) { - let mut env = Environment::new(); - let mut reader = BufReader::new(inp); - loop { - let mut input = String::new(); - outp.flush().unwrap(); - match reader.read_line(&mut input) { - Ok(0) => break, - Ok(_) => (), - Err(e) => { - writeln!(outp, "{}", e).unwrap(); - break; - } - } - let values = parse(&input); - let results = values - .iter() - .map(|v| eval_whnf(v, &mut env)) - .collect::<Vec<Value>>(); - for result in results { - writeln!(outp, "{}", result).unwrap(); - outp.flush().unwrap(); - } - } -} - -pub fn repl<I: Read, O: Write>(inp: &mut I, outp: &mut O) { - let mut env = Environment::new(); - let mut reader = BufReader::new(inp); - loop { - let mut input = String::new(); - write!(outp, "> ").unwrap(); - outp.flush().unwrap(); - match reader.read_line(&mut input) { - Ok(0) => break, - Ok(_) => (), - Err(e) => { - writeln!(outp, "{}", e).unwrap(); - break; - } - } - let values = parse(&input); - let results = values - .iter() - .map(|v| eval_whnf(v, &mut env)) - .collect::<Vec<Value>>(); - for result in results { - writeln!(outp, "{}", result).unwrap(); - outp.flush().unwrap(); - } - } -} |
