The following code compiles happily in GHC:<br>
<br>
&gt; {-# LANGUAGE TypeFamilies #-}<br>
&gt;<br>
&gt; class C a where<br>
&gt;   data D a<br>
&gt;   m :: D a -&gt; Bool<br>
&gt;<br>
&gt; test :: C a =&gt; D a -&gt; Bool<br>
&gt; test = m<br>
<br>
My question is why do I need the context in the function &quot;test&quot;?  It<br>
seems like since &quot;D&quot; is associated with class &quot;C&quot;, the compiler can<br>
safely assume that any time I have a &quot;D a&quot;, &quot;a&quot; must be an instance of<br>
C.  But GHC complains if the context is removed.<br>
<br>
At first I thought that maybe the associated type was just syntactic<br>
sugar for a non-associated data type family.  But this doesn&#39;t seem to<br>
be the case since I cannot instantiate D outside of an instance of C.<br>
Google and the type family documentation provided no other leads.<br>
<br>
Am I missing something here?  Is the context assumption invalid?  Or<br>
is it just an assumption that GHC doesn&#39;t make (yet)?<br>
<br>
Thanks in advance for any replies.<br>
<br>
-Eric