use std::{
env,
error::Error,
fs,
io::{self, stdin},
};
use locrian::{eval_str, io::IO, stdlib::STDLIB};
fn main() -> Result<(), Box<dyn Error>> {
let args = env::args().collect::<Vec<_>>();
let mut code = if args.len() > 1 {
fs::read_to_string(args.get(1).unwrap())?
} else {
io::read_to_string(stdin())?
};
if code.starts_with("#!") {
code = code[code.find("\n").unwrap()..].to_string();
}
let res = eval_str(&code, STDLIB.merge(IO.clone()))?;
println!("{}", res);
Ok(())
}