1
2use crate::{human::{Dict, Parser, View}, theory::{Kind, eta, lore, lore_end}};
3use core::fmt::Write;
4
5pub fn execute<O: Write, I:Iterator<Item = char>>
7(out: &mut O, input: I) {
8 let mut dict = Dict::new();
9
10 let inp = match Parser::new(input).parse_spair(&mut dict) {
11 Ok(k) => k,
12 Err(err) => {
13 let _ = write!(out, "P[!]: {}\n", err);
14 return;
15 }
16 };
17
18 let mut exp = lore(Kind::from((inp, lore_end())));
19 let _ = write!(out, "I: {}\n", View::new(&exp, &dict));
20
21 match eta(&mut exp) {
22 Ok(res) => { let _ = write!(out, "E[^]: {}\n", View::new(&res, &dict)); }
23 Err(res) => { let _ = write!(out, "E[H]: {}\n", View::new(&res, &dict)); }
24 }
25}