I think a few different variations of this theme would have worked equally well. Some of this is down to preference or simply coincidence.
IterableFactoryDefaults
should extend IterableOps
because it needs access to iterableFactory.
Having a separate definition for it doesn’t look very clean to me. But we could have used a self type instead of extending the trait.
Extending both in traits like Iterable
is not necessary but I find it cleaner. The intention is not that you extend IterableFactoryDefaults
. The intention is to extend IterableOps
and also mix in IterableFactoryDefaults
.