time it by macro, as well as fn apply f args