data D1 = D1; data D2 = D2 D1; data D3 = D3 D4; data D4 = D4 D3 D1; class C1 a where { foo :: a -> D3; } class C1 a => C2 a where { }