code: func filterWithRows(rows []uint64) rowFilter {
  	loc := 0
  	return func(rowID, key uint64, c *roaring.Container) (include, done bool) {
  		if loc >= len(rows) {
  			return false, true
  		}
  		i := sort.Search(len(rows[loc:]), func(i int) bool {
  			return rows[loc+i] >= rowID
  		})
  		loc += i
  		if loc >= len(rows) {
  			return false, true
  		}
  		if rows[loc] == rowID {
  			if loc == len(rows)-1 {
  				done = true
  			}
  			return true, done
  		}
  		return false, false
  	}
  }
docs: // TODO: this works, but it would be more performant if the fragment could seek
  // to the next row in the rows list rather than asking the filter for each
  // container serially. The container iterator would need to expose a seek
  // method, and the rowFilter would need some way of communicating to
  // fragment.rows what the next rowID to seek to is.