"Whether the attributes are values or types is up to the user, and whether later attributes accumulate or override earlier ones is also up to how the user interprets them." This doesn't explain it well, but you were adding types as attributes on to those symbols. Not struct instances.