added reverse with CanBuildFrom