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

typedef F<T extends core::Object = dynamic> = (T) → void;
typedef G<T extends core::Object = dynamic> = () → (T) → void;
class C<T extends core::Object = dynamic> extends core::Object {
  field (self::C::T) → void _x;
  constructor •((self::C::T) → void _x) → void
    : self::C::_x = _x, super core::Object::•()
    ;
  method f() → (self::C::T) → void
    return this.{self::C::_x};
}
static method g(self::C<core::num> c) → () → (core::num) → void {
  return c.{self::C::f} as{TypeError} () → (core::num) → void;
}
static method h(core::int i) → void {
  core::print("${i}");
}
static method test() → void {
  () → (core::num) → void x = self::g(new self::C::•<core::int>(self::h));
}
static method main() → void {}
