I think it’s an example of overthinking a problem. When the Java guys were confronted to the same issues with Java 8, they simply created collectors and asked clients to explicitly specify the receiving container. Boom, no more CanBuildFrom insanity and thousands of hours of work saved