If I have a type like data T = T Int String
and a function like so:
identity :: T -> T
identity (T a b) = T a b
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.