If you simply tag your data type with which instance you mean then you lose access to common data types. e.g. Compose and (,) dont hold a tag, so now I have to have hundreds of pairs of compositions depending on the attributes of their contents. This damages code reuse badly.