Rather then just relying on comparing type names all throughout elaboration, create type description data structures and use them during elaboration to handle proper types.