and the optional args parameter. (def fun (a (o b)) ...) isn't called like this: (fun (1 (o 2)))
and i don't see how changing the single case of varargs takes away the ability to manipulate expressions as they are. it alters it for that one case