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,ForDynamic} 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,ForDynamic} core::int*;
}
static method main() → dynamic {}
