// Formatted problems:
//
// pkg/front_end/testcases/inference/mixin_inference_unification_2.dart:19:69: Error: 'Object with M0, M1' can't implement both 'I<dynamic, List<dynamic>>' and 'I<List<dynamic>, dynamic>'
//  - 'I' is from 'pkg/front_end/testcases/inference/mixin_inference_unification_2.dart'.
//  - 'List' is from 'dart:core'.
// class /*@error=AmbiguousSupertypes*/ /*@error=AmbiguousSupertypes*/ A
//                                                                     ^
//
// pkg/front_end/testcases/inference/mixin_inference_unification_2.dart:19:69: Error: 'A' can't implement both 'I<dynamic, List<dynamic>>' and 'I<List<dynamic>, dynamic>'
//  - 'I' is from 'pkg/front_end/testcases/inference/mixin_inference_unification_2.dart'.
//  - 'List' is from 'dart:core'.
// class /*@error=AmbiguousSupertypes*/ /*@error=AmbiguousSupertypes*/ A
//                                                                     ^

// Unhandled errors:
//
// pkg/front_end/testcases/inference/mixin_inference_unification_2.dart:19:69: Error: 'Object with M0, M1' can't implement both 'I<dynamic, List<dynamic>>' and 'I<List<dynamic>, dynamic>'
//  - 'I' is from 'pkg/front_end/testcases/inference/mixin_inference_unification_2.dart'.
//  - 'List' is from 'dart:core'.
// class /*@error=AmbiguousSupertypes*/ /*@error=AmbiguousSupertypes*/ A
//                                                                     ^
//
// pkg/front_end/testcases/inference/mixin_inference_unification_2.dart:19:69: Error: 'A' can't implement both 'I<dynamic, List<dynamic>>' and 'I<List<dynamic>, dynamic>'
//  - 'I' is from 'pkg/front_end/testcases/inference/mixin_inference_unification_2.dart'.
//  - 'List' is from 'dart:core'.
// class /*@error=AmbiguousSupertypes*/ /*@error=AmbiguousSupertypes*/ A
//                                                                     ^

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

class I<X extends core::Object = dynamic, Y extends core::Object = dynamic> extends core::Object {
  synthetic constructor •() → self::I<self::I::X, self::I::Y>
    : super core::Object::•()
    ;
}
class M0<T extends core::Object = dynamic> extends core::Object implements self::I<self::M0::T, core::List<self::M0::T>> {
  synthetic constructor •() → self::M0<self::M0::T>
    : super core::Object::•()
    ;
}
class M1<T extends core::Object = dynamic> extends core::Object implements self::I<core::List<self::M1::T>, self::M1::T> {
  synthetic constructor •() → self::M1<self::M1::T>
    : super core::Object::•()
    ;
}
abstract class _A&Object&M0 = core::Object with self::M0<dynamic> {
  synthetic constructor •() → self::_A&Object&M0
    : super core::Object::•()
    ;
}
abstract class _A&Object&M0&M1 = self::_A&Object&M0 with self::M1<dynamic> {
  synthetic constructor •() → self::_A&Object&M0&M1
    : super self::_A&Object&M0::•()
    ;
}
class A extends self::_A&Object&M0&M1 {
  synthetic constructor •() → self::A
    : super self::_A&Object&M0&M1::•()
    ;
}
static method main() → dynamic {}
