composite fn with defmacro and wrap fn with future task