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

class Covariant<T extends core::Object* = dynamic> extends core::Object {
  synthetic constructor •() → self::Covariant<self::Covariant::T*>*
    : super core::Object::•()
    ;
}
class Contravariant<contravariant T extends core::Object* = dynamic> extends core::Object {
  synthetic constructor •() → self::Contravariant<self::Contravariant::T*>*
    : super core::Object::•()
    ;
}
class Invariant<invariant T extends core::Object* = dynamic> extends core::Object {
  synthetic constructor •() → self::Invariant<self::Invariant::T*>*
    : super core::Object::•()
    ;
}
static method covariantListInfer<T extends core::Object* = dynamic>(self::Covariant<core::List<self::covariantListInfer::T*>*>* x) → void {}
static method contravariantListInfer<T extends core::Object* = dynamic>(self::Contravariant<core::List<self::contravariantListInfer::T*>*>* x) → void {}
static method invariantListInfer<T extends core::Object* = dynamic>(self::Invariant<core::List<self::invariantListInfer::T*>*>* x) → void {}
static method main() → dynamic {
  self::Covariant<dynamic>* cov = new self::Covariant::•<dynamic>();
  self::covariantListInfer<dynamic>(new self::Covariant::•<core::List<dynamic>*>());
  self::Contravariant<core::Null?>* contra = new self::Contravariant::•<core::Null?>();
  self::contravariantListInfer<core::Null?>(new self::Contravariant::•<core::List<core::Null?>*>());
  self::Invariant<dynamic>* inv = new self::Invariant::•<dynamic>();
  self::invariantListInfer<core::Null?>(new self::Invariant::•<core::List<core::Null?>*>());
}
