recursive/constructive macros are fun o/