refactor ArgumentPattern