code: func WatchLoop(w watch.Interface, fn func(watch.Event) error) {
  	signals := make(chan os.Signal, 1)
  	signal.Notify(signals, os.Interrupt)
  	defer signal.Stop(signals)
  	for {
  		select {
  		case event, ok := <-w.ResultChan():
  			if !ok {
  				return
  			}
  			if err := fn(event); err != nil {
  				w.Stop()
  			}
  		case <-signals:
  			w.Stop()
  		}
  	}
  }
docs: // WatchLoop loops, passing events in w to fn.
  // If user sends interrupt signal, shut down cleanly. Otherwise, never return.