title: What is meant by 'visible' state change in the context of purity?
body: <p>I have portable class library with ReflectionHelper class containing a handful set of convenient methods to perform reflection related operations.<br/></p>
  
  <p>I marked many of these methods as pure but later in another peace of code I noticed a warning that <code>GetTypeInfo()</code> is not pure itself. I undersand that for new reflection api calling <code>GetTypeInfo()</code> results in loading the assembly, containing the type and the absense of this assembly leads to exception.<br/></p>
  
  <p>And now I'm confused with the definition of purity from <a href="http://msdn.microsoft.com/query/dev11.query?appId=Dev11IDEF1&amp;l=EN-US&amp;k=k%28System.Diagnostics.Contracts.PureAttribute%29;k%28SolutionItemsProject%29;k%28TargetFrameworkMoniker-.NETPortable,Version=v4.5%29;k%28DevLang-csharp%29&amp;rd=true" rel="nofollow">PureAttribute</a> documentation at MSDN:<br/></p>
  
  <p><em>Indicates that a type or method is pure, that is, it does not make any <strong>visible state changes</strong>.</em></p>
  
  <p>What change can be dubbed as visible? Do assembly loading falls under this category?</p>