utilize CanBuildFrom implicits instead of relying on specific builders