code: func eventWatch(params map[string]interface{}) (WatcherFunc, error) {
  	// The stale setting doesn't apply to events.
  
  	var name string
  	if err := assignValue(params, "name", &name); err != nil {
  		return nil, err
  	}
  
  	fn := func(p *Plan) (BlockingParamVal, interface{}, error) {
  		event := p.client.Event()
  		opts := makeQueryOptionsWithContext(p, false)
  		defer p.cancelFunc()
  		events, meta, err := event.List(name, &opts)
  		if err != nil {
  			return nil, nil, err
  		}
  
  		// Prune to only the new events
  		for i := 0; i < len(events); i++ {
  			if WaitIndexVal(event.IDToIndex(events[i].ID)).Equal(p.lastParamVal) {
  				events = events[i+1:]
  				break
  			}
  		}
  		return WaitIndexVal(meta.LastIndex), events, err
  	}
  	return fn, nil
  }
docs: // eventWatch is used to watch for events, optionally filtering on name