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 •() → void
    : 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 •() → void
    : super core::Object::•()
    ;
}
static method main() → dynamic {}
