public static Func<string, Task<T>> MyMethod<T>( UserCredentials credentials, Func<string, string, string, Task<T>> func ) => async (value) => await func(credentials.user, credentials.pwd, value); I'm having difficulty discerning the purity of the function, because obviously T(int) results in a different output as T(string). Or does the purity depend on T(int) = 5 always resulting in 10 and T(string) = "Foo" always resulting in "Bar"?