functions can now have several different type signatures, as long as they are all congruent