library test;
import self as self;
import "dart:core" as core;

typedef F<contravariant U extends core::Object* = dynamic, V extends core::Object* = dynamic> = (U*) →* V*;
class Foo<T extends core::Object* = dynamic> extends core::Object {
  synthetic constructor •() → self::Foo<self::Foo::T*>*
    : super core::Object::•()
    ;
  get v1() → self::Bar<self::Foo::T*>*
    return #C1;
  get v2() → self::Bar<core::List<self::Foo::T*>*>*
    return #C2;
  get v3() → self::Bar<(self::Foo::T*) →* self::Foo::T*>*
    return #C3;
  get v4() → self::Bar<((self::Foo::T*) →* self::Foo::T*) →* self::Foo::T*>*
    return #C4;
  get v5() → core::List<self::Foo::T*>*
    return #C5;
  get v6() → core::List<(self::Foo::T*) →* self::Foo::T*>*
    return #C6;
  get v7() → core::Map<self::Foo::T*, self::Foo::T*>*
    return #C8;
  get v8() → core::Map<(self::Foo::T*) →* self::Foo::T*, self::Foo::T*>*
    return #C9;
  get v9() → core::Map<self::Foo::T*, (self::Foo::T*) →* self::Foo::T*>*
    return #C10;
}
class Bar<T extends core::Object* = dynamic> extends core::Object {
  const constructor •() → self::Bar<self::Bar::T*>*
    : super core::Object::•()
    ;
}
static method main() → dynamic {}

constants  {
  #C1 = self::Bar<core::Null?> {}
  #C2 = self::Bar<core::List<core::Null?>*> {}
  #C3 = self::Bar<(core::Object*) →* core::Null?> {}
  #C4 = self::Bar<((core::Null?) →* core::Object*) →* core::Null?> {}
  #C5 = <core::Null?>[]
  #C6 = <(core::Object*) →* core::Null?>[]
  #C7 = <dynamic>[]
  #C8 = core::_ImmutableMap<core::Null?, core::Null?> {_kvPairs:#C7}
  #C9 = core::_ImmutableMap<(core::Object*) →* core::Null?, core::Null?> {_kvPairs:#C7}
  #C10 = core::_ImmutableMap<core::Null?, (core::Object*) →* core::Null?> {_kvPairs:#C7}
}
