Abstract
We present a simple and powerful type inference method for dynamically typed languages where no type information is supplied by the user. Type inference is reduced tot he problem of solvability of a system of type inclusion constraints over a type language that includes function types, constructor types, union, intersection, and recursive types, and conditional types. Conditional types enable us to analyze control flow using type inference, thus facilitating computation of accurate types. We demonstrate the power and practicality of the method with examples and performance results from an implementation.