add lazy range iterator