<br><font size=2 face="sans-serif">Hello,</font>
<br>
<br><tt><font size=2>&gt; &gt; &gt; data LSet t where<br>
&gt; &gt; &gt; &nbsp; &nbsp; Nil :: LSet Nil<br>
&gt; &gt; &gt; &nbsp; &nbsp; --either add the new element or do nothing<br>
&gt; &gt; &gt; &nbsp; &nbsp; Ins :: (Member a t b<br>
&gt; &gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; , If b (LSet t) (LSet
(a ::: t)) r)<br>
&gt; &gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =&gt; L a -&gt; LSet
t -&gt; r<br>
&gt; &gt; &gt;<br>
&gt; &gt; The constructor Ins needs to return an LSet. Maybe try replacing
<br>
&gt; occurrences of r with (LSet r).<br>
&gt; &gt; <br>
&gt; <br>
&gt; I expected that r would be an LSet, as its the output of If which<br>
&gt; returns its 2nd or 3rd argument:<br>
&gt; <br>
&gt; class If p x y z | p x y -&gt; z<br>
&gt; &nbsp; &nbsp; where if' :: p -&gt; x -&gt; y -&gt; z<br>
&gt; instance If T x y x <br>
&gt; instance If F x y y <br>
&gt; </font></tt>
<br><tt><font size=2>Type classes are open so there is nothing to prevent
you from adding another instance for If, perhaps in a different module,
which returns some arbitrary type.</font></tt>
<br>
<br><tt><font size=2>-Jeff</font></tt>
<br><tt><font size=2><br>
</font></tt>
<br>
<span style="font-family:'Arial',sans-serif; font-size:8pt; color:#000000">---<br>
<br>
This e-mail may contain confidential and/or privileged information. If you <br>
are not the intended recipient (or have received this e-mail in error) <br>
please notify the sender immediately and destroy this e-mail. Any <br>
unauthorized copying, disclosure or distribution of the material in this <br>
e-mail is strictly forbidden.</span>