abstract class AbstractNamedMixinApplication<T, S> = Class<T> with Mixin<S>;

abstract class Interface {
  int get field;
}

class Class<T> implements Interface {
  Class([this.field = 0]);
  Class.named(this.field);
  Class.redirectingGenerative(int field) : this(field);
  factory Class.fact(int field) => new Class(field);
  factory Class.redirectingFactory(int field) = Class;
  var field;
}

class NamedMixinApplication<T, S> = Class<T> with Mixin<S>;
main() {}
mixin Mixin<S> {}
test() {}
var f1 = NamedMixinApplication.new;
var f2 = NamedMixinApplication.named;
var f3 = NamedMixinApplication.redirectingGenerative;
