<div dir="ltr"><div><div><div><div><div><div><div><div>It seems to be that a missing associated type definition should be an error, by default, rather than a warning. The current behavior under those circumstances strikes me as very strange, particularly for data families and particularly in the presence of overlapping.<br><br></div><div>{-# LANGUAGE TypeFamilies #-}<br></div>class Foo a where<br>  data Assoc a<br>  foo :: proxy a -> Assoc a<br><br>instance {-# OVERLAPPABLE #-} Foo a where<br>  data Assoc a = AssocGeneral<br>  foo _ = AssocGeneral<br><br>instance {-# OVERLAPS #-} Foo Char where<br>  foo _ = AssocGeneral<br><br>blah :: Assoc Char<br>blah = foo (Proxy :: Proxy Char)<br></div></div></div></div></div></div><br></div>This compiles with just a warning because Assoc Char *falls through* to the general case. WAT? This breaks all my intuition about what associated types are supposed to be about.<br></div>