1. A computer-implemented method for facilitating the development and execution of a software program, comprising: obtaining a type interval for a generic type parameter of an implementation of an overloaded function; selecting an inference direction for the generic type parameter based on a variance of the generic type parameter, wherein the inference direction is an upward inference direction or a downward inference direction; and using the type interval and the inference direction to perform type inference on the generic type parameter.