I wonder if the lack of good optional dependency supports in the language played some additional role here. That is to say, the lack of optional dependency support actually forces the community to evolve in such direction and not entirely the response to solving the problem at hand. Of course, having able to write generic implementation (among other great features) is a prerequisite for this.