The subject disclosure pertains to layering of a plurality of type
systems. A development environment and language compilers can support
multiple data models and their type systems in the same program. Elements
of a program such as expressions can then be associated with several
types from the multiple type systems. Compilers can employ the
information provided by additional type systems to improve static type
checking. Furthermore, the information can be bubbled up to a user in a
plurality of forms including but not limited to intelligent assistance,
auto-completion, tool tips, error information, and return types to
enhance the program development experience.