class C a where { type T a; bar :: a -> T a; foo :: a -> T a -> T a; } data D = D; instance C D where { abstype T D = Int; bar _ = 41; foo _ i = i+1; } main = foo D 0;