I'm curious, but when can we have metadata as a first class citizen in the language? I see an interface as a version of this. Just as you create an interface file, you create a metadata file, which states it's contract (interface) communication channels, type, parent, property constructs and type rules, so on and so on, etc. Config file for data. That way you can program effects logically because of the metadata using the data state, instead of the other way around.
Something like this would help entity framework. Class is the data holder and it's metadata file holds it's indexes, alternative indexes, descriptions and history locations, etc.
In the web, it would be awesome to have the metadata move along with the data. It would even enable binary data sent instead of json as the metadata tells you how to hydrate it.
I'm a rectangle, not because my class name says so, but because my metadata says my label is such. Intellisense on what data you are allowed to list together instead of methods, no more null checks as metadata says it can't be null, rules on what (class, construct, type, etc) operations this is compatible with.
So maybe not then, as I the more I think of what it could do, there is not much to say what it cannot do.