<html><head><base href="x-msg://731/"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div>That link looks like it points to the manual for the most recent distribution, not HEAD. The edits I put into the manual for the new family instances are not there, for example.</div><div><br></div><div>Richard</div><br><div><div>On Jan 11, 2013, at 4:56 AM, Simon Peyton-Jones &lt;<a href="mailto:simonpj@microsoft.com">simonpj@microsoft.com</a>&gt; wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div lang="EN-GB" link="blue" vlink="purple" style="font-family: Helvetica; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div class="WordSection1" style="page: WordSection1; "><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><span style="font-size: 11pt; font-family: Verdana, sans-serif; color: rgb(31, 73, 125); ">The manual for HEAD is always online here<o:p></o:p></span></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><span style="font-size: 11pt; font-family: Verdana, sans-serif; color: rgb(31, 73, 125); "><a href="http://www.haskell.org/ghc/dist/current/docs/html/users_guide/type-families.html#type-instance-declarations" style="color: purple; text-decoration: underline; ">http://www.haskell.org/ghc/dist/current/docs/html/users_guide/type-families.html#type-instance-declarations</a><o:p></o:p></span></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><span style="font-size: 11pt; font-family: Verdana, sans-serif; color: rgb(31, 73, 125); ">&nbsp;</span></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><span style="font-size: 11pt; font-family: Verdana, sans-serif; color: rgb(31, 73, 125); ">Simon<o:p></o:p></span></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><span style="font-size: 11pt; font-family: Verdana, sans-serif; color: rgb(31, 73, 125); ">&nbsp;</span></div><div style="border-style: none none none solid; border-left-width: 1.5pt; border-left-color: blue; padding: 0cm 0cm 0cm 4pt; "><div><div style="border-style: solid none none; border-top-width: 1pt; border-top-color: rgb(181, 196, 223); padding: 3pt 0cm 0cm; "><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><b><span lang="EN-US" style="font-size: 10pt; font-family: Tahoma, sans-serif; ">From:</span></b><span lang="EN-US" style="font-size: 10pt; font-family: Tahoma, sans-serif; "><span class="Apple-converted-space">&nbsp;</span>Richard Eisenberg [mailto:eir@cis.upenn.edu]<span class="Apple-converted-space">&nbsp;</span><br><b>Sent:</b><span class="Apple-converted-space">&nbsp;</span>11 January 2013 03:03<br><b>To:</b><span class="Apple-converted-space">&nbsp;</span>Carter Schonwald<br><b>Cc:</b><span class="Apple-converted-space">&nbsp;</span>Martin Sulzmann; <a href="mailto:glasgow-haskell-bugs@haskell.org">glasgow-haskell-bugs@haskell.org</a>; Simon Peyton-Jones; GHC Users Mailing List<br><b>Subject:</b><span class="Apple-converted-space">&nbsp;</span>Re: Fundeps and type equality<o:p></o:p></span></div></div></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><o:p>&nbsp;</o:p></div><div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">Yes, I finished and pushed in December. A description of the design and how to use the feature is here:<o:p></o:p></div></div><div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><a href="http://hackage.haskell.org/trac/ghc/wiki/NewAxioms" style="color: purple; text-decoration: underline; ">http://hackage.haskell.org/trac/ghc/wiki/NewAxioms</a><o:p></o:p></div></div><div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><o:p>&nbsp;</o:p></div></div><div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">There's also a section (7.7.2.2 to be exact) in the manual, but building the manual from source is not for the faint of heart.<o:p></o:p></div></div><div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><o:p>&nbsp;</o:p></div></div><div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">Richard<o:p></o:p></div></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><o:p>&nbsp;</o:p></div><div><div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">On Jan 10, 2013, at 3:14 PM, Carter Schonwald &lt;<a href="mailto:carter.schonwald@gmail.com" style="color: purple; text-decoration: underline; ">carter.schonwald@gmail.com</a>&gt; wrote:<o:p></o:p></div></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><br><br><o:p></o:p></div><div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">so the overlapping type families &nbsp;are in HEAD?<o:p></o:p></div><div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><o:p>&nbsp;</o:p></div></div><div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">Awesome! I look forward to finding some time to try them out :)&nbsp;<o:p></o:p></div></div></div><div><p class="MsoNormal" style="margin: 0cm 0cm 12pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><o:p>&nbsp;</o:p></p><div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">On Thu, Jan 10, 2013 at 1:56 PM, Richard Eisenberg &lt;<a href="mailto:eir@cis.upenn.edu" target="_blank" style="color: purple; text-decoration: underline; ">eir@cis.upenn.edu</a>&gt; wrote:<o:p></o:p></div><div><div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">For better or worse, the new overlapping type family instances use a different overlapping mechanism than functional dependencies do. Class instances that overlap are chosen among by order of specificity; overlapping instances can be declared in separate modules. Overlapping family instances must be given an explicit order, and those that overlap must all be in the same module. The decision to make these different was to avoid type soundness issues that would arise with overlapping type family instances declared in separate modules. (Ordering a set of family instance equations by specificity, on the other hand, could easily be done within GHC.)<o:p></o:p></div></div><div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><o:p>&nbsp;</o:p></div></div><div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">So, as yet, we can't fully encode functional dependencies with type families, I don't think.<o:p></o:p></div></div><div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><span style="color: rgb(136, 136, 136); ">&nbsp;</span></div></div><div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><span style="color: rgb(136, 136, 136); ">Richard<o:p></o:p></span></div></div><div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><o:p>&nbsp;</o:p></div><div><div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">On Jan 2, 2013, at 4:01 PM, Martin Sulzmann &lt;<a href="mailto:martin.sulzmann.haskell@googlemail.com" target="_blank" style="color: purple; text-decoration: underline; ">martin.sulzmann.haskell@googlemail.com</a>&gt; wrote:<o:p></o:p></div></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><br><br><o:p></o:p></div><p class="MsoNormal" style="margin: 0cm 0cm 12pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><br>I agree with Iavor that it is fairly straight-forward to extend FC to support FD-style type improvement. In fact, I've formalized such a proof language in a PPDP'06 paper:<br>"Extracting programs from type class proofs"<br>(type improvement comes only at the end)<br><br>Similar to FC, coercions (proof terms) are used to represent type equations (improvement).<br><br>Why extend FC?<br>Why not simply use type families to encode FDs (and thus keep FC simple and small).<br><br>It's been a while, but as far as I remember, the encoding is only problematic in case of the combination of FDs and overlapping instances. Shouldn't this now be fixable given<br>that type family instances can be overlapping?<br>Maybe I'm missing something, guess it's also time to dig out some old notes ...<br><br>-Martin<o:p></o:p></p><div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">On Wed, Jan 2, 2013 at 10:04 AM, Simon Peyton-Jones &lt;<a href="mailto:simonpj@microsoft.com" target="_blank" style="color: purple; text-decoration: underline; ">simonpj@microsoft.com</a>&gt; wrote:<o:p></o:p></div><div><div><div style="margin: 0cm 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">As far as I understand, the reason that GHC does not construct such proofs is that it can't express them in its internal proof language (System FC). &nbsp;<o:p></o:p></div><div style="margin: 0cm 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">&nbsp;<o:p></o:p></div></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><span style="font-size: 11pt; font-family: Verdana, sans-serif; color: rgb(31, 73, 125); ">Iavor is quite right</span><o:p></o:p></div><div><div style="margin: 0cm 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">&nbsp;<o:p></o:p></div><div style="margin: 0cm 0cm 0.0001pt 36pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">It seems to me that it should be fairly straight-forward to extend FC to support this sort of proof, but I have not been able to convince folks that this is the case. &nbsp;I could elaborate, if there's interest.<o:p></o:p></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><span style="font-size: 11pt; font-family: Verdana, sans-serif; color: rgb(31, 73, 125); ">&nbsp;</span><o:p></o:p></div></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><span style="font-size: 11pt; font-family: Verdana, sans-serif; color: rgb(31, 73, 125); ">Iavor: I don’t think it’s straightforward, but I’m willing to be educated.&nbsp; By all means start a wiki page to explain how, if you think it is.&nbsp;</span><o:p></o:p></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><span style="font-size: 11pt; font-family: Verdana, sans-serif; color: rgb(31, 73, 125); ">&nbsp;</span><o:p></o:p></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><span style="font-size: 11pt; font-family: Verdana, sans-serif; color: rgb(31, 73, 125); ">I do agree that injective type families would be a good thing, and would deal with the main reason<span class="Apple-converted-space">&nbsp;</span> that fundeps are sometimes better than type families.&nbsp; A good start would be to begin a wiki page to flesh out the design issues, perhaps linked from<a href="http://hackage.haskell.org/trac/ghc/wiki/TypeFunctions" target="_blank" style="color: purple; text-decoration: underline; ">http://hackage.haskell.org/trac/ghc/wiki/TypeFunctions</a></span><o:p></o:p></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><span style="font-size: 11pt; font-family: Verdana, sans-serif; color: rgb(31, 73, 125); ">&nbsp;</span><o:p></o:p></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><span style="font-size: 11pt; font-family: Verdana, sans-serif; color: rgb(31, 73, 125); ">The main issues are, I think:</span><o:p></o:p></div><p style="margin-right: 0cm; margin-left: 0cm; font-size: 12pt; font-family: 'Times New Roman', serif; "><span style="font-size: 11pt; font-family: Symbol; color: rgb(31, 73, 125); ">·</span><span style="font-size: 7pt; color: rgb(31, 73, 125); ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="Apple-converted-space">&nbsp;</span></span><span style="font-size: 11pt; font-family: Verdana, sans-serif; color: rgb(31, 73, 125); ">How to express functional dependencies like “fixing the result type and the first argument will fix the second argument”</span><o:p></o:p></p><p style="margin-right: 0cm; margin-left: 0cm; font-size: 12pt; font-family: 'Times New Roman', serif; "><span style="font-size: 11pt; font-family: Symbol; color: rgb(31, 73, 125); ">·</span><span style="font-size: 7pt; color: rgb(31, 73, 125); ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="Apple-converted-space">&nbsp;</span></span><span style="font-size: 11pt; font-family: Verdana, sans-serif; color: rgb(31, 73, 125); ">How to express that idea in the proof language</span><o:p></o:p></p><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><span style="font-size: 11pt; font-family: Verdana, sans-serif; color: rgb(31, 73, 125); ">&nbsp;</span><o:p></o:p></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><span style="font-size: 11pt; font-family: Verdana, sans-serif; color: rgb(31, 73, 125); ">Simon</span><o:p></o:p></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><span style="font-size: 11pt; font-family: Verdana, sans-serif; color: rgb(31, 73, 125); ">&nbsp;</span><o:p></o:p></div><div style="border-style: none none none solid; border-left-width: 1.5pt; border-left-color: blue; padding: 0cm 0cm 0cm 4pt; "><div><div style="border-style: solid none none; border-top-width: 1pt; border-top-color: rgb(181, 196, 223); padding: 3pt 0cm 0cm; "><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><b><span lang="EN-US" style="font-size: 10pt; font-family: Tahoma, sans-serif; ">From:</span></b><span lang="EN-US" style="font-size: 10pt; font-family: Tahoma, sans-serif; "><span class="Apple-converted-space">&nbsp;</span><a href="mailto:glasgow-haskell-bugs-bounces@haskell.org" target="_blank" style="color: purple; text-decoration: underline; ">glasgow-haskell-bugs-bounces@haskell.org</a><span class="Apple-converted-space">&nbsp;</span>[mailto:<a href="mailto:glasgow-haskell-bugs-bounces@haskell.org" target="_blank" style="color: purple; text-decoration: underline; ">glasgow-haskell-bugs-bounces@haskell.org</a>]<span class="Apple-converted-space">&nbsp;</span><b>On Behalf Of<span class="Apple-converted-space">&nbsp;</span></b>Iavor Diatchki<br><b>Sent:</b><span class="Apple-converted-space">&nbsp;</span>26 December 2012 02:48<br><b>To:</b><span class="Apple-converted-space">&nbsp;</span>Conal Elliott<br><b>Cc:</b><span class="Apple-converted-space">&nbsp;</span><a href="mailto:glasgow-haskell-bugs@haskell.org" target="_blank" style="color: purple; text-decoration: underline; ">glasgow-haskell-bugs@haskell.org</a>; GHC Users Mailing List<br><b>Subject:</b><span class="Apple-converted-space">&nbsp;</span>Re: Fundeps and type equality</span><o:p></o:p></div></div></div><div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">&nbsp;<o:p></o:p></div><div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">Hello Conal,<o:p></o:p></div><div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">&nbsp;<o:p></o:p></div></div><div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">GHC implementation of functional dependencies is incomplete: it will use functional dependencies during type inference (i.e., to determine the values of free type variables), but it will not use them in proofs, which is what is needed in examples like the one you posted. &nbsp;The reason some proving is needed is that the compiler needs to figure out that for each instantiation of the type `ta` and `tb` will be the same (which, of course, follows directly from the FD on the class).<o:p></o:p></div></div><div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">&nbsp;<o:p></o:p></div></div><div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">As far as I understand, the reason that GHC does not construct such proofs is that it can't express them in its internal proof language (System FC). &nbsp;It seems to me that it should be fairly straight-forward to extend FC to support this sort of proof, but I have not been able to convince folks that this is the case. &nbsp;I could elaborate, if there's interest.<o:p></o:p></div></div><div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">&nbsp;<o:p></o:p></div></div><div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">In the mean time, the way forward would probably be to express the dependency using type families, which I find tends to be more verbose but, at present, is better supported in GHC.<o:p></o:p></div></div><div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">&nbsp;<o:p></o:p></div></div><div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">Cheers,<o:p></o:p></div></div><div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">-Iavor<o:p></o:p></div></div><div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">PS: cc-ing the GHC users' list, as there was some talk of closing the ghc-bugs list, but I am not sure if the transition happened yet.<o:p></o:p></div></div><div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">&nbsp;<o:p></o:p></div></div><div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">&nbsp;<o:p></o:p></div></div><div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">&nbsp;<o:p></o:p></div></div></div><div><p class="MsoNormal" style="margin: 0cm 0cm 12pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">&nbsp;<o:p></o:p></p><div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">On Tue, Dec 25, 2012 at 6:15 PM, Conal Elliott &lt;<a href="mailto:conal@conal.net" target="_blank" style="color: purple; text-decoration: underline; ">conal@conal.net</a>&gt; wrote:<o:p></o:p></div><div><div><div><p class="MsoNormal" style="margin: 0cm 0cm 12pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">I ran into a simple falure with functional dependencies (in GHC 7.4.1):<br><br>&gt; class Foo a ta | a -&gt; ta<br>&gt;<span class="Apple-converted-space">&nbsp;</span><br>&gt; foo :: (Foo a ta, Foo a tb, Eq ta) =&gt; ta -&gt; tb -&gt; Bool<br>&gt; foo = (==)<br><br>I expected that the `a -&gt; ta` functional dependency would suffice to prove that `ta ~ tb`, but<br><br>&nbsp;&nbsp;&nbsp; Pixie/Bug1.hs:9:7:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Could not deduce (ta ~ tb)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; from the context (Foo a ta, Foo a tb, Eq ta)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bound by the type signature for<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; foo :: (Foo a ta, Foo a tb, Eq ta) =&gt; ta -&gt; tb -&gt; Bool<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at Pixie/Bug1.hs:9:1-10<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; `ta' is a rigid type variable bound by<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; the type signature for<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; foo :: (Foo a ta, Foo a tb, Eq ta) =&gt; ta -&gt; tb -&gt; Bool<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at Pixie/Bug1.hs:9:1<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; `tb' is a rigid type variable bound by<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; the type signature for<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; foo :: (Foo a ta, Foo a tb, Eq ta) =&gt; ta -&gt; tb -&gt; Bool<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at Pixie/Bug1.hs:9:1<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Expected type: ta -&gt; tb -&gt; Bool<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Actual type: ta -&gt; ta -&gt; Bool<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; In the expression: (==)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; In an equation for `foo': foo = (==)<br>&nbsp;&nbsp;&nbsp; Failed, modules loaded: none.<o:p></o:p></p></div><p class="MsoNormal" style="margin: 0cm 0cm 12pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">Any insights about what's going wrong here?<o:p></o:p></p></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><span style="color: rgb(136, 136, 136); ">-- Conal</span><o:p></o:p></div></div><p class="MsoNormal" style="margin: 0cm 0cm 12pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><br>_______________________________________________<br>Glasgow-haskell-bugs mailing list<br><a href="mailto:Glasgow-haskell-bugs@haskell.org" target="_blank" style="color: purple; text-decoration: underline; ">Glasgow-haskell-bugs@haskell.org</a><br><a href="http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs" target="_blank" style="color: purple; text-decoration: underline; ">http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs</a><o:p></o:p></p></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">&nbsp;<o:p></o:p></div></div></div></div></div><p class="MsoNormal" style="margin: 0cm 0cm 12pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><br>_______________________________________________<br>Glasgow-haskell-users mailing list<br><a href="mailto:Glasgow-haskell-users@haskell.org" target="_blank" style="color: purple; text-decoration: underline; ">Glasgow-haskell-users@haskell.org</a><br><a href="http://www.haskell.org/mailman/listinfo/glasgow-haskell-users" target="_blank" style="color: purple; text-decoration: underline; ">http://www.haskell.org/mailman/listinfo/glasgow-haskell-users</a><o:p></o:p></p></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><br>_______________________________________________<br>Glasgow-haskell-users mailing list<br><a href="mailto:Glasgow-haskell-users@haskell.org" target="_blank" style="color: purple; text-decoration: underline; ">Glasgow-haskell-users@haskell.org</a><br><a href="http://www.haskell.org/mailman/listinfo/glasgow-haskell-users" target="_blank" style="color: purple; text-decoration: underline; ">http://www.haskell.org/mailman/listinfo/glasgow-haskell-users</a><o:p></o:p></div></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><o:p>&nbsp;</o:p></div></div></div><p class="MsoNormal" style="margin: 0cm 0cm 12pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><br>_______________________________________________<br>Glasgow-haskell-users mailing list<br><a href="mailto:Glasgow-haskell-users@haskell.org" style="color: purple; text-decoration: underline; ">Glasgow-haskell-users@haskell.org</a><br><a href="http://www.haskell.org/mailman/listinfo/glasgow-haskell-users" target="_blank" style="color: purple; text-decoration: underline; ">http://www.haskell.org/mailman/listinfo/glasgow-haskell-users</a><o:p></o:p></p></div><div style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><o:p>&nbsp;</o:p></div></div></div><p class="MsoNormal" style="margin: 0cm 0cm 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "></p></div></div></div></blockquote></div><br></body></html>