Okay, I just realized something... what if we changed destructuring so it worked on tables too? Then this would work:
(let '(a b c) (obj a 1 b 2 c 3) ...)
(def foo ('(a b c)) (prn a b c)) (foo (obj c 1 b 2)) -> nil 2 1
(foo :c 1 :b 2) -> nil 2 1 (foo {c 1 b 2}) -> nil 2 1
(foo '(1 2 3)) -> 1 2 3