I don't understand how #3 fixes things. If one has an alias to e.g. Error then all calls on Error should include references to the alias right? So doesn't there need to be some clever code for literalEqual: so that ALiases dereference to get the actual binding?