even simpler macros
can now handle nils except for the component-fn
a couple Richard's suggestions