library test;
//
// Problems in library:
//
// pkg/front_end/testcases/inference/top_level_return_and_yield.dart:18:34: Error: A value of type 'dynamic Function(dynamic)' can't be assigned to a variable of type 'FutureOr<int Function(int)>'.
//  - 'FutureOr' is from 'dart:async'.
// Try changing the type of the left hand side, or casting the right hand side to 'FutureOr<int Function(int)>'.
//   return /*@returnType=dynamic*/ (/*@type=dynamic*/ x) => x;
//                                  ^
//
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 (core::int x) → core::int => x;
}
static method b() → asy::Future<(core::int) → core::int> async {
  return let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/top_level_return_and_yield.dart:18:34: Error: A value of type 'dynamic Function(dynamic)' can't be assigned to a variable of type 'FutureOr<int Function(int)>'.
 - 'FutureOr' is from 'dart:async'.
Try changing the type of the left hand side, or casting the right hand side to 'FutureOr<int Function(int)>'.
  return /*@returnType=dynamic*/ (/*@type=dynamic*/ x) => x;
                                 ^" in ((dynamic x) → dynamic => x) as{TypeError} asy::FutureOr<(core::int) → core::int>;
}
static method c() → core::Iterable<(core::int) → core::int> sync* {
  yield(core::int x) → core::int => x;
}
static method d() → core::Iterable<(core::int) → core::int> sync* {
  yield*<(core::int) → core::int>[(core::int x) → core::int => x];
}
static method e() → asy::Stream<(core::int) → core::int> async* {
  yield(core::int x) → core::int => x;
}
static method f() → asy::Stream<(core::int) → core::int> async* {
  yield* asy::Stream::fromIterable<(core::int) → core::int>(<(core::int) → core::int>[(core::int x) → core::int => x]);
}
static method main() → dynamic {}
