use crate::namespace::{typedef::TypeDef, GlobalNamespace}; pub const TYPE_INTEGER: &str = "int"; pub const TYPE_FLOAT: &str = "float"; pub const TYPE_STRING: &str = "string"; pub const TRAIT_NUMERIC: &str = "Num"; pub const CMD_ADD: &str = "add"; pub fn initialise_globals() -> GlobalNamespace { let ns = GlobalNamespace::init(); let numeric = ns.register_trait(TRAIT_NUMERIC).unwrap(); ns.register_type(TYPE_INTEGER).unwrap().add_trait(&numeric); ns.register_type(TYPE_FLOAT).unwrap().add_trait(&numeric); ns.register_type(TYPE_STRING).unwrap(); // def math add [ Numeric Numeric ] -> Numeric ns.register_command( CMD_ADD, Some(TypeDef::List(vec![ TypeDef::Trait(numeric), TypeDef::Trait(numeric), ])), Some(TypeDef::Trait(numeric)), ) .unwrap(); ns }