split out range and iterator concepts