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

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