Should it be the other way round: if $ operator is applied to a variable, it should be of a detachable type, since we do not control what is stored there? Or, even worse, what happens if the external code puts a value of a wrong type to this variable?