You can indeed create dicts that have any tag. read/1 can only read dicts that have an atom or variable as tag. There is little that can be done against that. The only thing that is theoretically possible is to use an attributed variable instead of a plain variable. That seems a big overkill for a small mostly theoretical problem