refactoring around Function::Eval
refactoring around Args