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*>*
    ;
  get v1() → self::Bar<self::Foo::T*>*
    ;
  get v2() → self::Bar<core::List<self::Foo::T*>*>*
    ;
  get v3() → self::Bar<(self::Foo::T*) →* self::Foo::T*>*
    ;
  get v4() → self::Bar<((self::Foo::T*) →* self::Foo::T*) →* self::Foo::T*>*
    ;
  get v5() → core::List<self::Foo::T*>*
    ;
  get v6() → core::List<(self::Foo::T*) →* self::Foo::T*>*
    ;
  get v7() → core::Map<self::Foo::T*, self::Foo::T*>*
    ;
  get v8() → core::Map<(self::Foo::T*) →* self::Foo::T*, self::Foo::T*>*
    ;
  get v9() → core::Map<self::Foo::T*, (self::Foo::T*) →* self::Foo::T*>*
    ;
}
class Bar<T extends core::Object* = dynamic> extends core::Object {
  const constructor •() → self::Bar<self::Bar::T*>*
    : super core::Object::•()
    ;
}
static method main() → dynamic
  ;
