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

static method test() → void {
  core::List<core::int*>* o;
  core::int* y = o.{core::Iterable::fold}<core::int*>(0, (core::int* x, core::int* y) → core::int* => x.{core::num::+}(y));
  dynamic z = o.{core::Iterable::fold}<dynamic>(0, (dynamic x, core::int* y) → dynamic => x.+(y));
  y = z as{TypeError} core::int*;
}
static method functionExpressionInvocation() → void {
  core::List<core::int*>* o;
  core::int* y = o.{core::Iterable::fold}.call<core::int*>(0, (core::int* x, core::int* y) → core::int* => x.{core::num::+}(y));
  dynamic z = o.{core::Iterable::fold}.call<dynamic>(0, (dynamic x, core::int* y) → dynamic => x.+(y));
  y = z as{TypeError} core::int*;
}
static method main() → dynamic {}
