class C a where { type T a; } data D a = D a; instance C (D a) where { type T (D a) = Int; } instance C (D Int) where { type T (D Int) = Bool; }