code: func (ms *Module) empty() bool {
  	if ms == nil {
  		return true
  	}
  
  	// This must be updated to cover any new collections added to Module
  	// in future.
  	return (len(ms.Resources) == 0 &&
  		len(ms.OutputValues) == 0 &&
  		len(ms.LocalValues) == 0)
  }
docs: // empty returns true if the receving module state is contributing nothing
  // to the state. In other words, it returns true if the module could be
  // removed from the state altogether without changing the meaning of the state.
  //
  // In practice a module containing no objects is the same as a non-existent
  // module, and so we can opportunistically clean up once a module becomes
  // empty on the assumption that it will be re-added if needed later.