1. A computer-implemented method for facilitating the development and execution of a software program, comprising during runtime of the software program: during runtime of the software program; delaying type inference on a generic type parameter of an implementation of an overloaded function that is invoked in the software program, 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 when the comparing indicates that 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; if the queried type does not match any of the inference choices, further delaying type inference on the generic type parameter.