smarter box
box fn args if not protocol