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<inner T> {
        A(T),
        B(T, T),
        C
    }
or
    #[derive(Map(T))]
    enum Thing<T> { ... }
    // 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::<u32>::Some(3)
func::<u32>(3)
std.Option.[u32].Some(3)
func.[T]("hello", test, 3);
std::Option:<u32>::Some(3)
func:<u32>(3)


