<div><p class="MsoNormal" style="margin: 0in 0in 0pt"><span lang="EN-IE" style="mso-ansi-language: en-ie"><font size="3">Below are examples of using the sub-class context at class level and at instance level.</font></span></p><p class="MsoNormal" style="margin: 0in 0in 0pt"><span lang="EN-IE" style="mso-ansi-language: en-ie"><font size="3"> In this simple case they seem to give the same results<br />In general, are there certain situations in which one or the other is preferred? </font></span></p><p class="MsoNormal" style="margin: 0in 0in 0pt"><span lang="EN-IE" style="mso-ansi-language: en-ie"><font size="3">Pat</font></span></p><p class="MsoNormal" style="margin: 0in 0in 0pt"><span lang="EN-IE" style="mso-ansi-language: en-ie"><font size="3">module CLASS where<br />-- class and sub-class<br />class Class a where<br /> foo :: a -&gt; a<br /> foo a = a</font></span></p><p class="MsoNormal" style="margin: 0in 0in 0pt"><span lang="EN-IE" style="mso-ansi-language: en-ie"><font size="3">class Class a =&gt; SubClass a where<br /> moo :: a -&gt; a<br /> moo a = foo a</font></span></p><p class="MsoNormal" style="margin: 0in 0in 0pt"><span lang="EN-IE" style="mso-ansi-language: en-ie"><font size="3">instance Class Integer where<br />instance SubClass Integer where</font></span></p><p class="MsoNormal" style="margin: 0in 0in 0pt"><span lang="EN-IE" style="mso-ansi-language: en-ie"><font size="3">*CLASS&gt; :t foo 2<br />foo 2 :: forall t. (Class t, Num t) =&gt; t<br />*CLASS&gt; :t moo 2<br />moo 2 :: forall t. (SubClass t, Num t) =&gt; t</font></span></p><p class="MsoNormal" style="margin: 0in 0in 0pt"><span lang="EN-IE" style="mso-ansi-language: en-ie"><font size="3"></font></span></p><p class="MsoNormal" style="margin: 0in 0in 0pt"><span lang="EN-IE" style="mso-ansi-language: en-ie"><font size="3">module INSTANCE where<br />-- Using context at instance level<br />-- Is <br />class Class a where<br /> foo :: a -&gt; a<br /> foo a = a</font></span></p><p class="MsoNormal" style="margin: 0in 0in 0pt"><span lang="EN-IE" style="mso-ansi-language: en-ie"><font size="3">class SubClass a where<br /> moo :: a -&gt; a</font></span></p><span lang="EN-IE" style="mso-ansi-language: en-ie"><font size="3"><p class="MsoNormal" style="margin: 0in 0in 0pt"><br />instance Class Integer where<br />instance Class Integer =&gt; SubClass Integer where <br />   moo a = foo a</p><p class="MsoNormal" style="margin: 0in 0in 0pt">INSTANCE&gt; :t foo 2<br />foo 2 :: forall t. (Class t, Num t) =&gt; t<br />INSTANCE&gt; :t moo 2<br />moo 2 :: forall t. (SubClass t, Num t) =&gt; t</p><p class="MsoNormal" style="margin: 0in 0in 0pt"></p></font></span></div>