You can resolve a symbol, that is f : Env x Symbol -> Symbol where the result symbol is either a namespace qualification of the given symbol if the symbol is bound to a global value or the symbol itself if the symbol exists as a local binding (or binds to a namespace).
You can get a binding in an environment from a symbol as if the environment were a map.
You can get the metadata of an environment if any. IMeta etc.
You can "update" the environment by altering a binding to get a new environment with that change back.
What can you do with an environment?
f : Env x Symbol -> Symbol
where the result symbol is either a namespace qualification of the given symbol if the symbol is bound to a global value or the symbol itself if the symbol exists as a local binding (or binds to a namespace).IMeta
etc.