<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">

<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii">
<meta name=Generator content="Microsoft Word 12 (filtered medium)">
<style>
<!--
 /* Font Definitions */
 @font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page Section1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.Section1
        {page:Section1;}
-->
</style>
<!--[if gte mso 9]><xml>
 <o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
 <o:shapelayout v:ext="edit">
  <o:idmap v:ext="edit" data="1" />
 </o:shapelayout></xml><![endif]-->
</head>

<body lang=EN-US link=blue vlink=purple>

<div class=Section1>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>In Haskell, the context of all functions in a mutually recursive
group must be identical.<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><a
href="http://haskell.org/onlinereport/decls.html#generalization">http://haskell.org/onlinereport/decls.html#generalization</a><o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'>Simon<o:p></o:p></span></p>

<p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";
color:#1F497D'><o:p>&nbsp;</o:p></span></p>

<div style='border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt'>

<div>

<div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm'>

<p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span
style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>
haskell-bounces@haskell.org [mailto:haskell-bounces@haskell.org] <b>On Behalf
Of </b>Luis Cabellos<br>
<b>Sent:</b> 14 January 2010 11:26<br>
<b>To:</b> haskell@haskell.org<br>
<b>Subject:</b> [Haskell] Signature error because the order<o:p></o:p></span></p>

</div>

</div>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

<div>

<p class=MsoNormal>Hi,<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

</div>

<div>

<p class=MsoNormal>&nbsp;&nbsp;I found than this piece of code causes an error
in GHC ( <b><a href="http://haskell.pastebin.com/m5e3f4a4c">http://haskell.pastebin.com/m5e3f4a4c</a></b>
):<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

</div>

<div>

<p class=MsoNormal><span style='font-family:"Courier New"'>data Tree a = Leaf a
| Node (Tree a) (Tree a)</span><o:p></o:p></p>

</div>

<div>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

</div>

<div>

<p class=MsoNormal><span style='font-family:"Courier New"'>--prettyShow ::
(Show a, Num a) =&gt; Tree a -&gt; String &nbsp;-- WORKS</span><o:p></o:p></p>

</div>

<div>

<p class=MsoNormal><span style='font-family:"Courier New"'>prettyShow :: (Num
a, Show a) =&gt; Tree a -&gt; String &nbsp;-- FAILS</span><o:p></o:p></p>

</div>

<div>

<p class=MsoNormal><span style='font-family:"Courier New"'>prettyShow (Leaf a)
= show a</span><o:p></o:p></p>

</div>

<div>

<p class=MsoNormal><span style='font-family:"Courier New"'>prettyShow (Node a
b) = (simple a) ++ (simple b)</span><o:p></o:p></p>

</div>

<div>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

</div>

<div>

<p class=MsoNormal><span style='font-family:"Courier New"'>simple :: (Show a,
Num a) =&gt; Tree a -&gt; String</span><o:p></o:p></p>

</div>

<div>

<p class=MsoNormal><span style='font-family:"Courier New"'>simple (Leaf x) =
prettyShow (Leaf x)</span><o:p></o:p></p>

</div>

<div>

<p class=MsoNormal><span style='font-family:"Courier New"'>simple x =
&quot;(&quot; ++ prettyShow x ++ &quot;)&quot;</span><o:p></o:p></p>

</div>

<div>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

</div>

<div>

<p class=MsoNormal>With the error:<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal><span style='font-family:"Courier New"'>test.lhs:14:0:</span><o:p></o:p></p>

</div>

<div>

<p class=MsoNormal><span style='font-family:"Courier New"'>&nbsp;&nbsp;
&nbsp;Couldn't match expected type `Show a'</span><o:p></o:p></p>

</div>

<div>

<p class=MsoNormal><span style='font-family:"Courier New"'>&nbsp;&nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; against inferred type `Num a1'</span><o:p></o:p></p>

</div>

<div>

<p class=MsoNormal><span style='font-family:"Courier New"'>&nbsp;&nbsp;
&nbsp;When matching the contexts of the signatures for</span><o:p></o:p></p>

</div>

<div>

<p class=MsoNormal><span style='font-family:"Courier New"'>&nbsp;&nbsp; &nbsp;
&nbsp;prettyShow :: forall a. (Num a, Show a) =&gt; Tree a -&gt; String</span><o:p></o:p></p>

</div>

<div>

<p class=MsoNormal><span style='font-family:"Courier New"'>&nbsp;&nbsp; &nbsp;
&nbsp;simple :: forall a. (Show a, Num a) =&gt; Tree a -&gt; String</span><o:p></o:p></p>

</div>

<div>

<p class=MsoNormal><span style='font-family:"Courier New"'>&nbsp;&nbsp;
&nbsp;The signature contexts in a mutually recursive group should all be
identical</span><o:p></o:p></p>

</div>

<div>

<p class=MsoNormal><span style='font-family:"Courier New"'>&nbsp;&nbsp;
&nbsp;When generalising the type(s) for prettyShow, simple</span><o:p></o:p></p>

</div>

<div>

<p class=MsoNormal><span style='font-family:"Courier New"'>Failed, modules
loaded: none.</span><o:p></o:p></p>

</div>

<div>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

</div>

<div>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

</div>

<div>

<p class=MsoNormal>But if I change the order of <b>Show</b> and <b>Num</b> in
the signature of <i>prettyShow</i> it works.<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

</div>

<div>

<p class=MsoNormal>It's a GHC problem? it's normal than signature is
order-dependent?<o:p></o:p></p>

</div>

<div>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

</div>

<div>

<p class=MsoNormal>I use <b>GHC &nbsp;6.10.3</b><o:p></o:p></p>

</div>

<div>

<p class=MsoNormal><o:p>&nbsp;</o:p></p>

</div>

<div>

<p class=MsoNormal>Thanks, Luis Cabellos<o:p></o:p></p>

</div>

<p class=MsoNormal><br>
-- <br>
<br>
LC, (&quot;There is no Dana, only Zuul.&quot; - Cazafantasmas [1984]) <o:p></o:p></p>

</div>

</div>

</body>

</html>