Somewhat smarter now to avoid copying recursive types if the only thing they have to copy is the type itself.  This is a silly workaround.  A smarter approach would be to implement a generic function to analyze types to tell whether they include any mutable elements, like I did years ago in my SML generics library.