subtyping of functions