refactored Signal to support different arities