Heyy @adityaathalye Thanks for the explanation. I didn't know about the compile/runtime diff b/w function and a macro.
This is also the reason why one can't pass a macro as an argument to a function. i.e. while macros are also functions of data->data, they are not "first-class", because they are meaningless in a run-time context. An unevaluated macro would be meaningless at run-time, because it can't do anything with the source code any more.
Ooh, this thread has appeared an opportune moment. Directly related to what we are discussing now ... https://clojurians.slack.com/archives/C06E3HYPR/p1512859240000027