var a = []; // Array ~> a function bar() { a = a.concat([]); // terminate despite expanding types: // a ~> .concat(Array) // Array ~> .concat(Array) // Array ~> a // Array ~> .concat(Array) // Array ~> a }; class A { x: A>; } var a_ = new A; function foo0() { a_ = a_.x; // terminate despite expanding types } type T = { y: S }; type S = T>; function foo1(b: S<*>) { b = b.y; // terminate despite expanding types, OK // S<*> = { y: S> } // Both S> and S<*> expand to { y: { y: ... }}. } class D { } class B extends D { } class C extends B { } ((new C: C): D) // error: number ~/~ string