<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<META NAME="Generator" CONTENT="MS Exchange Server version 6.5.7654.12">
<TITLE>Type class context propagation investigation</TITLE>
</HEAD>
<BODY>
<!-- Converted from text/plain format -->

<P><FONT SIZE=2>Hi,<BR>
<BR>
How does the context of a class instance declaration affect its subclasses?<BR>
<BR>
The Num class instance outlined below has its requirement for Eq and Show satisfied on the preceding lines, and the code will compile. But if I, say, add an (Eq a) constraint to the Eq instance, in preparation for a simple (==) definition, I find that the Num instance declaration is left lacking. If I add the same (Eq a) constraint now to Num, calm is restored.<BR>
<BR>
data Foo a = F a<BR>
<BR>
instance Eq (Foo a) where<BR>
&nbsp;(==) = undefined<BR>
<BR>
instance Show (Foo a) where<BR>
&nbsp;show = undefined<BR>
<BR>
instance Num (Foo a)<BR>
&nbsp;(+) = undefined<BR>
&nbsp;... etc.<BR>
<BR>
The thing that confuses me with this is that it seems like Num &quot;knows&quot; that an (Eq a) context has been applied, and so what it sees as a problem, is somehow also the solution. Any advice/rules of thumb? Does this situation occur elsewhere? How do these constraints propagate?<BR>
<BR>
Thanks,<BR>
Paul</FONT>
</P>

</BODY>
</HTML>