Main.hx 658 B

123456789101112131415161718192021
  1. class Main {
  2. static function main() {
  3. var foo:Foo = null;
  4. var mono = new Mono(foo);
  5. $type(mono); // `Mono<Unknown<0>>` for both 4.1 and nightly.
  6. // var foolike:FooLike = mono.bound;
  7. // Uncommenting ^ would bind it correctly for both 4.1/nightly.
  8. var barlike:BarLike = mono.bound;
  9. // ^ 4.1 correctly errors out (not here, but in `new Mono(foo)`). Nightly happily compiles.
  10. $type(mono); // Both bind to `Mono<BarLike>`.
  11. }
  12. }
  13. class Mono<A> {
  14. public final bound:A;
  15. public function new<B:A>(obj:B) bound = obj;
  16. }
  17. class Foo { public function foo():Void {} }
  18. typedef FooLike = { function foo():Void; }
  19. typedef BarLike = { function bar():Void; }