variable arity functions can generally be implemented using message-passing style