@lift macro that evaluates subexpressions first. addresses #10