Abstract function with imposed arguments and return types

for correctness, use ::Any (or leave it off entirely)

additional discussion at Function Parameter Speculation #17168