code: func (rb *RegretableReader) Read(p []byte) (n int, err error) {
  	if rb.overflow {
  		return rb.reader.Read(p)
  	}
  	if rb.r < rb.w {
  		n = copy(p, rb.buf[rb.r:rb.w])
  		rb.r += n
  		return
  	}
  	n, err = rb.reader.Read(p)
  	bn := copy(rb.buf[rb.w:], p[:n])
  	rb.w, rb.r = rb.w+bn, rb.w+n
  	if bn < n {
  		rb.overflow = true
  	}
  	return
  }
docs: // reads from the underlying reader. Will buffer all input until Regret is called.