use ResultType or TResult  for generic type declaration