class C1 a where { type T1 a; } class C2 a where { type T2 a; } instance C1 Int where { type T1 Int = Bool; } instance C2 Bool where { type T2 Bool = Unit; } instance C2 (T1 Int) where { type T2 (T1 Int) = Int; }