Если у меня есть тип типа data T = T Int String
и такая функция:
identity :: T -> T
identity (T a b) = T a b
После деконструкции в сопоставлении шаблонов GHC создает новый объект T, содержащий ссылки на те же Int и String? Или он возвращает тот же самый объект (с тем же адресом памяти), который он получил? Я понимаю, что они семантически эквивалентны, мне просто интересно.