code: func (v mergeStrategy) MergeList(e apply.ListElement) (apply.Result, error) {
  	// No merge logic if adding or deleting a field
  	if result, done := v.doAddOrDelete(e); done {
  		return result, nil
  	}
  	// Detect conflict in ListElement
  	if err := v.doConflictDetect(e); err != nil {
  		return apply.Result{}, err
  	}
  	// Merge each item in the list and append it to the list
  	merged := []interface{}{}
  	for _, value := range e.Values {
  		// Recursively merge the list element before adding the value to the list
  		m, err := value.Merge(v.strategic)
  		if err != nil {
  			return apply.Result{}, err
  		}
  
  		switch m.Operation {
  		case apply.SET:
  			// Keep the list item value
  			merged = append(merged, m.MergedResult)
  		case apply.DROP:
  			// Drop the list item value
  		default:
  			panic(fmt.Errorf("Unexpected result operation type %+v", m))
  		}
  	}
  
  	if len(merged) == 0 {
  		// If the list is empty, return a nil entry
  		return apply.Result{Operation: apply.SET, MergedResult: nil}, nil
  	}
  	// Return the merged list, and tell the caller to keep it
  	return apply.Result{Operation: apply.SET, MergedResult: merged}, nil
  }
docs: // MergeList merges the lists in a ListElement into a single Result