code: func (d *Diff) Equal(d2 *Diff) bool {
  	// If one is nil, they must both be nil
  	if d == nil || d2 == nil {
  		return d == d2
  	}
  
  	// Sort the modules
  	sort.Sort(moduleDiffSort(d.Modules))
  	sort.Sort(moduleDiffSort(d2.Modules))
  
  	// Copy since we have to modify the module destroy flag to false so
  	// we don't compare that. TODO: delete this when we get rid of the
  	// destroy flag on modules.
  	dCopy := d.DeepCopy()
  	d2Copy := d2.DeepCopy()
  	for _, m := range dCopy.Modules {
  		m.Destroy = false
  	}
  	for _, m := range d2Copy.Modules {
  		m.Destroy = false
  	}
  
  	// Use DeepEqual
  	return reflect.DeepEqual(dCopy, d2Copy)
  }
docs: // Equal compares two diffs for exact equality.
  //
  // This is different from the Same comparison that is supported which
  // checks for operation equality taking into account computed values. Equal
  // instead checks for exact equality.