Many statically and dynamically typed languages attempt to achieve flexibility in their type discipline by some notion of subtyping. Subtyping relaxes the requirement that functions take arguments of a given type, by allowing arguments of any subtype of that type to be given. Such functions can accept arguments of types which will only be defined in the future; the open-ended character of this situation is important in large systems where it is essential to be able to extend existing facilities without modifying them.