1. A computer-implemented method for facilitating the development and execution of a software program, comprising: during runtime of the software program, delaying type inference on a generic type parameter of an implementation of an overloaded function, wherein the generic type parameter is associated with a type interval comprising an unbounded lower limit and one or more self-typed constraints; upon detecting a type query for a dynamic type of the generic type parameter, comparing a queried type from the type query with a set of inference choices for the generic type parameter; and if the queried type matches an inference choice from the set of inference choices, using the inference choice to perform type inference on the generic type parameter.