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

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