int callCount = 0;

abstract class A<X> {
  void Function(X) get g;
}

class B implements A<int> {
  void Function(int) get g => (int i) => callCount++;
}

void foo(Object o, num value) {}

void main() {}

expect(expected, actual) {}

throws(void Function() f) {}
