Describir: The role of type equality in meta-programming