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

typedef IntToInt = (core::int) → core::int;
static method a() → (core::int) → core::int {
  return (dynamic x) → dynamic => x;
}
static method b() → asy::Future<(core::int) → core::int> async {
  return (dynamic x) → dynamic => x;
}
static method c() → core::Iterable<(core::int) → core::int> sync* {
  yield(dynamic x) → dynamic => x;
}
static method d() → core::Iterable<(core::int) → core::int> sync* {
  yield*<dynamic>[(dynamic x) → dynamic => x];
}
static method e() → asy::Stream<(core::int) → core::int> async* {
  yield(dynamic x) → dynamic => x;
}
static method f() → asy::Stream<(core::int) → core::int> async* {
  yield* asy::Stream::fromIterable<dynamic>(<dynamic>[(dynamic x) → dynamic => x]);
}
static method main() → dynamic {}
