"are used when a type or set of types needs to model a concept whose interface is incompatible with the type(s)." . . . . .