mirror of
https://github.com/HigherOrderCO/Kind.git
synced 2024-10-03 18:27:13 +03:00
rename to_hs to to_hs_checker, to differentiate between compiling to hoas checker file, and the compiler to actually run
This commit is contained in:
parent
4d421106bd
commit
f96624ddcb
@ -22,10 +22,10 @@ impl Book {
|
||||
//code
|
||||
}
|
||||
|
||||
pub fn to_hs(&self) -> String {
|
||||
pub fn to_hs_checker(&self) -> String {
|
||||
let mut code = String::new();
|
||||
for (name, term) in &self.defs {
|
||||
let expr = term.to_hs(im::Vector::new(), &mut 0);
|
||||
let expr = term.to_hs_checker(im::Vector::new(), &mut 0);
|
||||
code.push_str(&format!("{} = (Ref \"{}\" {})\n", Term::to_hs_name(name), name, expr));
|
||||
}
|
||||
code
|
||||
|
@ -37,7 +37,7 @@ fn generate_check_hvm1(book: &Book, command: &str, arg: &str) -> String {
|
||||
fn generate_check_hs(book: &Book, command: &str, arg: &str) -> String {
|
||||
let kind_hs = include_str!("./kind2.hs");
|
||||
let kind_hs = kind_hs.lines().filter(|line| !line.starts_with("xString")).collect::<Vec<_>>().join("\n");
|
||||
let book_hs = book.to_hs();
|
||||
let book_hs = book.to_hs_checker();
|
||||
let main_hs = match command {
|
||||
"check" => format!("main = (apiCheck {})\n", Term::to_hs_name(arg)),
|
||||
"run" => format!("main = (apiNormal {})\n", Term::to_hs_name(arg)),
|
||||
|
@ -23,11 +23,11 @@ impl Oper {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn to_hvm1(&self) -> &'static str {
|
||||
pub fn to_hvm1_checker(&self) -> &'static str {
|
||||
self.to_ctr()
|
||||
}
|
||||
|
||||
pub fn to_hs(&self) -> &'static str {
|
||||
pub fn to_hs_checker(&self) -> &'static str {
|
||||
self.to_ctr()
|
||||
}
|
||||
|
||||
@ -35,7 +35,7 @@ impl Oper {
|
||||
|
||||
impl Term {
|
||||
|
||||
pub fn to_hvm1(&self, _env: im::Vector<String>, _met: &mut usize) -> String {
|
||||
pub fn to_hvm1_checker(&self, _env: im::Vector<String>, _met: &mut usize) -> String {
|
||||
todo!()
|
||||
}
|
||||
|
||||
@ -43,34 +43,34 @@ impl Term {
|
||||
format!("x{}", name.replace("-", "_").replace(".","_"))
|
||||
}
|
||||
|
||||
pub fn to_hs(&self, env: im::Vector<String>, met: &mut usize) -> String {
|
||||
pub fn to_hs_checker(&self, env: im::Vector<String>, met: &mut usize) -> String {
|
||||
match self {
|
||||
Term::All { nam, inp, bod } => {
|
||||
let inp = inp.to_hs(env.clone(), met);
|
||||
let bod = bod.to_hs(cons(&env, nam.clone()), met);
|
||||
let inp = inp.to_hs_checker(env.clone(), met);
|
||||
let bod = bod.to_hs_checker(cons(&env, nam.clone()), met);
|
||||
format!("(All \"{}\" {} $ \\{} -> {})", nam, inp, Term::to_hs_name(nam), bod)
|
||||
},
|
||||
Term::Lam { nam, bod } => {
|
||||
let bod = bod.to_hs(cons(&env, nam.clone()), met);
|
||||
let bod = bod.to_hs_checker(cons(&env, nam.clone()), met);
|
||||
format!("(Lam \"{}\" $ \\{} -> {})", nam, Term::to_hs_name(nam), bod)
|
||||
},
|
||||
Term::App { fun, arg } => {
|
||||
let fun = fun.to_hs(env.clone(), met);
|
||||
let arg = arg.to_hs(env.clone(), met);
|
||||
let fun = fun.to_hs_checker(env.clone(), met);
|
||||
let arg = arg.to_hs_checker(env.clone(), met);
|
||||
format!("(App {} {})", fun, arg)
|
||||
},
|
||||
Term::Ann { chk, val, typ } => {
|
||||
let val = val.to_hs(env.clone(), met);
|
||||
let typ = typ.to_hs(env.clone(), met);
|
||||
let val = val.to_hs_checker(env.clone(), met);
|
||||
let typ = typ.to_hs_checker(env.clone(), met);
|
||||
format!("(Ann {} {} {})", if *chk { "True" } else { "False" }, val, typ)
|
||||
},
|
||||
Term::Slf { nam, typ, bod } => {
|
||||
let typ = typ.to_hs(env.clone(), met);
|
||||
let bod = bod.to_hs(cons(&env, nam.clone()), met);
|
||||
let typ = typ.to_hs_checker(env.clone(), met);
|
||||
let bod = bod.to_hs_checker(cons(&env, nam.clone()), met);
|
||||
format!("(Slf \"{}\" {} $ \\{} -> {})", nam, typ, Term::to_hs_name(nam), bod)
|
||||
},
|
||||
Term::Ins { val } => {
|
||||
let val = val.to_hs(env.clone(), met);
|
||||
let val = val.to_hs_checker(env.clone(), met);
|
||||
format!("(Ins {})", val)
|
||||
},
|
||||
Term::Set => {
|
||||
@ -83,25 +83,25 @@ impl Term {
|
||||
format!("(Num {})", val)
|
||||
},
|
||||
Term::Op2 { opr, fst, snd } => {
|
||||
let fst = fst.to_hs(env.clone(), met);
|
||||
let snd = snd.to_hs(env.clone(), met);
|
||||
format!("(Op2 {} {} {})", opr.to_hs(), fst, snd)
|
||||
let fst = fst.to_hs_checker(env.clone(), met);
|
||||
let snd = snd.to_hs_checker(env.clone(), met);
|
||||
format!("(Op2 {} {} {})", opr.to_hs_checker(), fst, snd)
|
||||
},
|
||||
Term::Swi { nam, x, z, s, p } => {
|
||||
let x = x.to_hs(env.clone(), met);
|
||||
let z = z.to_hs(env.clone(), met);
|
||||
let s = s.to_hs(cons(&env, format!("{}-1", nam)), met);
|
||||
let p = p.to_hs(cons(&env, nam.clone()), met);
|
||||
let x = x.to_hs_checker(env.clone(), met);
|
||||
let z = z.to_hs_checker(env.clone(), met);
|
||||
let s = s.to_hs_checker(cons(&env, format!("{}-1", nam)), met);
|
||||
let p = p.to_hs_checker(cons(&env, nam.clone()), met);
|
||||
format!("(Swi \"{}\" {} {} (\\{} -> {}) (\\{} -> {}))", nam, x, z, Term::to_hs_name(&format!("{}-1", nam)), s, Term::to_hs_name(nam), p)
|
||||
},
|
||||
Term::Let { nam, val, bod } => {
|
||||
let val = val.to_hs(env.clone(), met);
|
||||
let bod = bod.to_hs(cons(&env, nam.clone()), met);
|
||||
let val = val.to_hs_checker(env.clone(), met);
|
||||
let bod = bod.to_hs_checker(cons(&env, nam.clone()), met);
|
||||
format!("(Let \"{}\" {} $ \\{} -> {})", nam, val, Term::to_hs_name(nam), bod)
|
||||
},
|
||||
Term::Use { nam, val, bod } => {
|
||||
let val = val.to_hs(env.clone(), met);
|
||||
let bod = bod.to_hs(cons(&env, nam.clone()), met);
|
||||
let val = val.to_hs_checker(env.clone(), met);
|
||||
let bod = bod.to_hs_checker(cons(&env, nam.clone()), met);
|
||||
format!("(Use \"{}\" {} $ \\{} -> {})", nam, val, Term::to_hs_name(nam), bod)
|
||||
},
|
||||
Term::Hol { nam } => {
|
||||
@ -118,7 +118,7 @@ impl Term {
|
||||
format!("{}", Term::to_hs_name(nam))
|
||||
},
|
||||
Term::Src { src, val } => {
|
||||
let val = val.to_hs(env, met);
|
||||
let val = val.to_hs_checker(env, met);
|
||||
format!("(Src {} {})", src.to_u64(), val)
|
||||
},
|
||||
Term::Nat { nat } => {
|
||||
|
Loading…
Reference in New Issue
Block a user