Read fields of a variable-free object without copying its type
Why
Each o["f"] instantiated the whole type of o, and the .cmt file stored every copy, so reading each field of an object with n fields once cost O(n²): 800 fields allocated 77M words and took 0.87 s. They now allocate 6.5M words and take 0.06 s.
When the identifier's type is generic and has no type variables, a copy would be identical, so the identifier keeps the type itself and only the field's type is instantiated. Looking up a field that the type has doesn't change it. Types with variables are still copied.