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