resolution overview loop { resolve idents resolve + type check / match instructions URes.resolve(errs) can return: failed, ok(id), waiting each instruction keeps track of progress eg. fns: match each arg updates to whether it's waiting or finished: ok or err only finish if no sub tasks are waiting finished = "macro ready" run macros / code modification on "macro ready" (fns, structs) eg. insert instructions hygienic; only take in from scope add inserted instructions to unresolved list finished = "analysis ready" analysis on "analysis ready" fns eg. does this return in all code paths finished + all correct = "ready to lower" lower "ready to lower" fns run lowered const fns / var expressions } move names into separate vec with origins? make struct fields a vec, resolve to index? inner values that auto generate map function: enum Thing { A(T), B(T, T), C } or #[derive(Map(T))] enum Thing { ... } // scoping here is bad :woozy: {([< std::Option:(u32)::Some(3) func:(u32)("hello", test, 3); std::Option:[u32]::Some(3) func:[T]("hello", test, 3); std::Option::::Some(3) func::(3) std.Option.[u32].Some(3) func.[T]("hello", test, 3); std::Option:::Some(3) func:(3)