library test;
//
// Problems in library:
//
// pkg/front_end/testcases/inference/local_return_and_yield.dart:19:36: 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;

import "dart:async";

typedef IntToInt = (core::int) → core::int;
static method main() → dynamic {
  function a() → (core::int) → core::int {
    return (core::int x) → core::int => x;
  }
  function b() → asy::Future<(core::int) → core::int> async {
    return let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/local_return_and_yield.dart:19:36: 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>;
  }
  function c() → core::Iterable<(core::int) → core::int> sync* {
    yield(core::int x) → core::int => x;
  }
  function d() → core::Iterable<(core::int) → core::int> sync* {
    yield*<(core::int) → core::int>[(core::int x) → core::int => x];
  }
  function e() → asy::Stream<(core::int) → core::int> async* {
    yield(core::int x) → core::int => x;
  }
  function 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]);
  }
}
