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

class F0<T extends core::Object = dynamic> extends core::Object {
  constructor •(core::List<self::F0::T> a) → self::F0<self::F0::T>
    : super core::Object::•() {}
}
class F1<T extends core::Object = dynamic> extends core::Object {
  constructor •({core::List<self::F1::T> a = null}) → self::F1<self::F1::T>
    : super core::Object::•() {}
}
class F2<T extends core::Object = dynamic> extends core::Object {
  constructor •(core::Iterable<self::F2::T> a) → self::F2<self::F2::T>
    : super core::Object::•() {}
}
class F3<T extends core::Object = dynamic> extends core::Object {
  constructor •(core::Iterable<core::Iterable<self::F3::T>> a) → self::F3<self::F3::T>
    : super core::Object::•() {}
}
class F4<T extends core::Object = dynamic> extends core::Object {
  constructor •({core::Iterable<core::Iterable<self::F4::T>> a = null}) → self::F4<self::F4::T>
    : super core::Object::•() {}
}
static method test() → void {
  new self::F0::•<core::int>(<dynamic>[]);
  new self::F0::•<core::int>(<dynamic>[3]);
  new self::F0::•<core::int>(<dynamic>["hello"]);
  new self::F0::•<core::int>(<dynamic>["hello", 3]);
  new self::F1::•<core::int>(a: <dynamic>[]);
  new self::F1::•<core::int>(a: <dynamic>[3]);
  new self::F1::•<core::int>(a: <dynamic>["hello"]);
  new self::F1::•<core::int>(a: <dynamic>["hello", 3]);
  new self::F2::•<core::int>(<dynamic>[]);
  new self::F2::•<core::int>(<dynamic>[3]);
  new self::F2::•<core::int>(<dynamic>["hello"]);
  new self::F2::•<core::int>(<dynamic>["hello", 3]);
  new self::F3::•<core::int>(<dynamic>[]);
  new self::F3::•<core::int>(<dynamic>[<dynamic>[3]]);
  new self::F3::•<core::int>(<dynamic>[<dynamic>["hello"]]);
  new self::F3::•<core::int>(<dynamic>[<dynamic>["hello"], <dynamic>[3]]);
  new self::F4::•<core::int>(a: <dynamic>[]);
  new self::F4::•<core::int>(a: <dynamic>[<dynamic>[3]]);
  new self::F4::•<core::int>(a: <dynamic>[<dynamic>["hello"]]);
  new self::F4::•<core::int>(a: <dynamic>[<dynamic>["hello"], <dynamic>[3]]);
  new self::F3::•<dynamic>(<dynamic>[]);
  dynamic f31 = new self::F3::•<dynamic>(<dynamic>[<dynamic>[3]]);
  dynamic f32 = new self::F3::•<dynamic>(<dynamic>[<dynamic>["hello"]]);
  dynamic f33 = new self::F3::•<dynamic>(<dynamic>[<dynamic>["hello"], <dynamic>[3]]);
  new self::F4::•<dynamic>(a: <dynamic>[]);
  new self::F4::•<dynamic>(a: <dynamic>[<dynamic>[3]]);
  new self::F4::•<dynamic>(a: <dynamic>[<dynamic>["hello"]]);
  new self::F4::•<dynamic>(a: <dynamic>[<dynamic>["hello"], <dynamic>[3]]);
}
static method main() → dynamic {}
