use yield *next internally