<div dir="ltr">Thank you for the quick response.&nbsp; It&#39;s very helpful and makes perfect sense now.<br><br><div class="gmail_quote">On Thu, Aug 7, 2008 at 7:58 PM, Ryan Ingram <span dir="ltr">&lt;<a href="mailto:ryani.spam@gmail.com">ryani.spam@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Also, you may find it helpful to add<br>
<br>
&gt; {-# LANGUAGE KindSignatures #-}<br>
<br>
to the top of your program, and start annotating your class and<br>
instance declarations for clarity:<br>
<div class="Ih2E3d"><br>
&gt; class Conflict (p :: * -&gt; * -&gt; *) where<br>
&gt; &nbsp; &nbsp;hasConflict :: p x y -&gt; Bool</div></blockquote><div><br>Ah, yes we do that sometimes, but not with consistency.<br>&nbsp;</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div><div class="Wj3C7c"><br>
On Thu, Aug 7, 2008 at 7:51 PM, Ryan Ingram &lt;<a href="mailto:ryani.spam@gmail.com">ryani.spam@gmail.com</a>&gt; wrote:<br>
&gt; I&#39;m just guessing from this email; I can&#39;t see your code. &nbsp;Let me know<br>
&gt; if I go wrong anywhere.<br>
&gt;<br>
&gt; It looks like you expect your patches to be some type (p :: * -&gt; * -&gt;<br>
&gt; *); that is, a type like<br>
&gt;<br>
&gt;&gt; data Patch x y = ...</div></div></blockquote><div><br>Yes, that&#39;s right and sorry for not including Patch.<br>&nbsp;</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div><div class="Wj3C7c"><br>
&gt;<br>
&gt; However, the instance declaration:<br>
&gt;<br>
&gt;&gt; instance Conflict (p x y) =&gt; Conflict (PatchInfoAnd (p x y))<br>
&gt;<br>
&gt; is referring to ANY types<br>
&gt; &nbsp; p :: * -&gt; * -&gt; * -&gt; * -&gt; *<br>
&gt; &nbsp; x :: *<br>
&gt; &nbsp; y :: *<br>
&gt; so that (p x y :: * -&gt; * -&gt; *); that is, a type like this:<br>
&gt;<br>
&gt;&gt; data PatchBroken a b x y = ...<br>
&gt;<br>
&gt; in this case an instance for Conflict (PatchBroken Int Bool) would<br>
&gt; give instances for Conflict (PatchInfoAnd (PatchBroken Int Bool)).</div></div></blockquote><div><br>That makes perfect sense.&nbsp; So, by including x and y in the instance I was dramatically changing the kind inference.&nbsp; That didn&#39;t occur to me earlier, but it does make sense.<br>
&nbsp;<br>Thanks!<br>Jason<br></div></div><br></div>