code: func loop(ints ...int64) (<-chan int64, error) {
  	var start, stop int64
  	switch len(ints) {
  	case 1:
  		start, stop = 0, ints[0]
  	case 2:
  		start, stop = ints[0], ints[1]
  	default:
  		return nil, fmt.Errorf("loop: wrong number of arguments, expected 1 or 2"+
  			", but got %d", len(ints))
  	}
  
  	ch := make(chan int64)
  
  	go func() {
  		for i := start; i < stop; i++ {
  			ch <- i
  		}
  		close(ch)
  	}()
  
  	return ch, nil
  }
docs: // loop accepts varying parameters and differs its behavior. If given one
  // parameter, loop will return a goroutine that begins at 0 and loops until the
  // given int, increasing the index by 1 each iteration. If given two parameters,
  // loop will return a goroutine that begins at the first parameter and loops
  // up to but not including the second parameter.
  //
  //    // Prints 0 1 2 3 4
  // 		for _, i := range loop(5) {
  // 			print(i)
  // 		}
  //
  //    // Prints 5 6 7
  // 		for _, i := range loop(5, 8) {
  // 			print(i)
  // 		}
  //