// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

class I<X, Y> {}

mixin M0<T> implements I<T, List<T>> {}

mixin M1<T> implements I<List<T>, T> {}

//////////////////////////////////////////////////////
// Inference does not produce infinite types
///////////////////////////////////////////////////////

// No solution, even with unification, since solution
// requires that I<List<U0>, U0> == I<U1, List<U1>>
// for some U0, U1, and hence that:
// U0 = List<U1>
// U1 = List<U0>
// which has no finite solution
class A with M0, M1 {} /*@compile-error=unspecified*/

void main() {}