fgi_mod!{
fn name_of_nat:(
Thk[0]
foralli X:NmSet.
0 Nat -> 0 F Nm[X]
) = {
unsafe (1) trapdoor::name_of_nat
}
fn name_eq:(
Thk[0]
foralli (X,Y):NmSet.
0 Nm[X] -> 0 Nm[Y] -> 0 F Bool
) = {
unsafe (2) trapdoor::name_eq
}
}
pub mod trapdoor {
use crate::ast::{Name};
use crate::dynamics::{RtVal,ExpTerm};
pub fn name_of_nat(args:Vec<RtVal>) -> ExpTerm {
match &args[0] {
RtVal::Nat(n) => {
ExpTerm::Ret(RtVal::Name(Name::Num(*n)))
}
v => panic!("expected a natural number, not: {:?}", v)
}
}
pub fn name_eq(args:Vec<RtVal>) -> ExpTerm {
match (&args[0],&args[1]) {
(RtVal::Name(n1), RtVal::Name(n2)) => {
ExpTerm::Ret(RtVal::Bool(n1 == n2))
}
(v1, v2) => panic!("expected two names, not: {:?} and {:?}", v1, v2)
}
}
}
pub mod static_tests {
#[test]
pub fn typing() { fgi_listing_test!{
open crate::examples::name;
ret 0
}}
}