title: Does GHC make a new copy of an object when deconstructing and reconstructing it?
body: <p>If I have a type like <code>data T = T Int String</code> and a function like so:</p>
  
  <pre><code>identity :: T -&gt; T
  identity (T a b) = T a b
  </code></pre>
  
  <p>After the deconstruction in the pattern matching, does GHC create a new T object containing references to the same Int and String? Or does it return the exact same object (with the same memory address) it received? I understand they're semantically equivalent, I'm just curious.</p>