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

import "dart:async";

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