library test;
//
// Problems in library:
//
// pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart:15:5: Error: Can't infer the type of 'a': circularity found during type inference.
// Specify the type explicitly.
// var a = /*@ returnType=num* */ () => intValue /*@target=num::+*/ + b;
//     ^
//
import self as self;
import "dart:core" as core;

static field core::int* intValue = 0;
static field core::num* numValue = 0;
static field core::double* doubleValue = 0.0;
static field invalid-type a = (() → core::num* => self::intValue.{core::num::+}(self::b as{TypeError} core::num*)) as{TypeError} invalid-type;
static field dynamic b = self::a.call();
static field () →* core::num* c = () → core::num* => self::numValue.{core::num::+}(self::d);
static field core::num* d = self::c.call();
static field () →* core::double* e = () → core::double* => self::doubleValue.{core::double::+}(self::f);
static field core::double* f = self::e.call();
static method main() → dynamic {}
