library;
//
// Problems in library:
//
// pkg/front_end/testcases/general/ignore_function.dart:14:15: Error: Can't infer a type for 'other' as some of the inherited members have different types.
// Try adding an explicit type.
//   operator ==(other) => false;
//               ^^^^^
//
import self as self;
import "dart:core" as core;

import "dart:core" as core;

class A extends core::Object implements core::Function {
  synthetic constructor •() → self::A*
    ;
  operator ==(dynamic other) → core::bool*
    ;
}
class B extends core::Object implements self::Function {
  synthetic constructor •() → self::B*
    ;
  operator ==(invalid-type other) → core::bool*
    ;
}
class Function extends core::Object {
  synthetic constructor •() → self::Function*
    ;
  operator ==(core::Object* other) → core::bool*
    ;
}
static method main() → dynamic
  ;
