// @dart = 2.6
abstract class FooBase<Tf> {
  int get x;
  factory FooBase(int x) = Foo<Tf>;
}

abstract class Foo<T> implements FooBase {
  factory Foo(int x) = Bar<String, T>;
}

class Bar<Sb, Tb> implements Foo<Tb> {
  int x;
  Bar(this.x) {}
}

class Builder<X> {
  method() {}
}

class SimpleCase<A, B> {
  factory SimpleCase() = SimpleCaseImpl<A, B>;
}

class SimpleCaseImpl<Ai, Bi> implements SimpleCase<Ai, Bi> {
  factory SimpleCaseImpl() = SimpleCaseImpl2<Ai, Bi>;
}

class SimpleCaseImpl2<Ai2, Bi2> implements SimpleCaseImpl<Ai2, Bi2> {}

class Base<M> {}

class Mixin<M> {}

class Mix<M> = Base<M> with Mixin<M>;
main() {}
