Let&#39;s see tthis:<br><div style="margin-left:40px"><span style="font-family:courier new,monospace">Prelude&gt; :t 3 &quot;a&quot;<br>3 &quot;a&quot; :: (Num ([Char] -&gt; t)) =&gt; t<br></span></div><br>No complaint from GHC; but now see this:<br>


<br><span style="font-family:courier new,monospace"></span><div style="margin-left:40px"><span style="font-family:courier new,monospace">Prelude&gt; :t  &quot;a&quot; 3<br><br>&lt;interactive&gt;:1:0:<br>    Couldn&#39;t match expected type `t1 -&gt; t&#39;<br>


           against inferred type `[Char]&#39;<br>    In the expression: &quot;a&quot; 3<br></span></div><br>Why does it not fail for  (<span style="font-family:courier new,monospace">:t 3 &quot;a&quot;</span>) but does fail for (<span style="font-family:courier new,monospace">:t  &quot;a&quot; 3</span>)?<br>


<br>In the second case, why the GHC doesn&#39;t give something like?<br><span style="font-family:courier new,monospace">(</span><span style="font-family:courier new,monospace"><span style="font-family:courier new,monospace">[Char] </span>(</span><span style="font-family:courier new,monospace">a -&gt; t), Num a) =&gt; t</span><br>


<br>In other words, how the first one does make &quot;sense&quot; (however strange the &quot;sense&quot; may seem) to GHC while the second one doesn&#39;t?<br><br>Now let&#39;s consider the evaluation scenario:<br><br><div style="margin-left:40px">


<span style="font-family:courier new,monospace">Prelude&gt;  3 2<br><br>&lt;interactive&gt;:1:0:<br>    No instance for (Num (t -&gt; t1))<br>      arising from the literal `3&#39; at &lt;interactive&gt;:1:0-2<br>    Possible fix: add an instance declaration for (Num (t -&gt; t1))<br>


    In the expression: 3 2<br>    In the definition of `it&#39;: it = 3 2<br></span></div><br>Note, how the GHC suggests us this &quot;strange constraint&quot; as a <b>possible fix</b> BUT see this:<br><div style="margin-left:40px">


<span style="font-family:courier new,monospace">Prelude&gt;  &quot;a&quot; 2<br><br>&lt;interactive&gt;:1:0:<br>    Couldn&#39;t match expected type `t1 -&gt; t&#39;<br>           against inferred type `[Char]&#39;<br>    In the expression: &quot;a&quot; 2<br>


    In the definition of `it&#39;: it = &quot;a&quot; 2<br></span><br></div>In this case the GHC doesn&#39;t even allow us to add any &quot;possible fix&quot;.<br><br><br><br>-Damodar<br><br><br><div class="gmail_quote">

On Fri, Nov 16, 2012 at 2:27 PM, Sean Leather <span dir="ltr">&lt;<a href="mailto:leather@cs.uu.nl" target="_blank">leather@cs.uu.nl</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Daryoush,<div><br><br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


<div>Prelude&gt; :t 3 2</div><div>3 2 :: (Num a, Num (a -&gt; t)) =&gt; t</div>

<div><div><br></div><div>What does the type mean in plain english?</div></div></blockquote></div><br></div><div>It&#39;s important to remember that numeric literals are polymorphic. That is, 3 :: Num a =&gt; a. They do not have monomorphic types such as Int or Integer.</div>




<div><br></div><div>In the above, GHCi is inferring the principal type of 3 applied to 2. Since 3 is in the position of function application, it should have a function type, e.g. a -&gt; t. And 2 is the argument to 3, so it has the type &#39;a&#39;. But there must be Num constraints on these types, and that&#39;s what the context (Num a, Num (a -&gt; t)) is telling you. Num (a -&gt; t) is a strange constraint but so is applying 3 to 2. Whenever you see a Num constraint on a function type, it probably means you&#39;re doing something wrong.</div>




<div><br></div><div>You might find the (brief) description of typing numeric literals in the language definition helpful:</div><div><br></div><div><a href="http://www.haskell.org/onlinereport/haskell2010/haskellch6.html#x13-1360006.4.1" target="_blank">http://www.haskell.org/onlinereport/haskell2010/haskellch6.html#x13-1360006.4.1</a></div>




<div><br></div><div>Also, in response to your initial query...</div><div><div><br></div><div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">




I am having hard time understanding how removing the  outer parenthesis in<br>(max.(+1)) 2 2 <br>to <br>max.(+1) 2 2</blockquote></div><div style="color:rgb(34,34,34);font-size:13px;font-family:arial,sans-serif">

<br></div></div><div style="color:rgb(34,34,34);font-size:13px;font-family:arial,sans-serif">Keep in mind the precedence of the function composition operator (.) here:</div><div style="color:rgb(34,34,34);font-size:13px;font-family:arial,sans-serif">




<br></div><div><div><font color="#222222" face="arial, sans-serif">Prelude&gt; :i (.)</font></div><div><font color="#222222" face="arial, sans-serif">(.) :: (b -&gt; c) -&gt; (a -&gt; b) -&gt; a -&gt; c <span style="white-space:pre-wrap">        </span>-- Defined in GHC.Base</font></div>




<div><font color="#222222" face="arial, sans-serif">infixr 9 .</font></div><div><font color="#222222" face="arial, sans-serif"><br></font></div><div><font color="#222222" face="arial, sans-serif">Function application is infixl 10, so even though max . (+1) :: (Num b, Ord b) =&gt; b -&gt; b -&gt; b, when you do max . (+1) 2, the application of (+1) to 2 binds more tightly than (.).</font></div>




<div><font color="#222222" face="arial, sans-serif"><br></font></div><div><font color="#222222" face="arial, sans-serif">A common idiom for removing parentheses with a sequence of compositions is to use ($):</font></div>



<div>
<font color="#222222" face="arial, sans-serif"><br></font></div><div><font color="#222222" face="arial, sans-serif"><div>Prelude&gt; :i ($)</div><div>($) :: (a -&gt; b) -&gt; a -&gt; b <span style="white-space:pre-wrap">        </span>-- Defined in GHC.Base</div>




<div>infixr 0 $</div><div><br></div><div>Note that it has the lowest possible precedence. So, you often see the composition of functions as f . g . h $ arg. But this doesn&#39;t work well for (curried) functions with 2 arguments. So, in your case, I&#39;d guess the parentheses is simplest idiomatic solution. Though, I think I&#39;d prefer max (succ 2) 2.</div>




</font><font color="#222222" face="arial, sans-serif"><div><br></div><div>Regards,</div><div>Sean</div></font></div></div>
<br>_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org" target="_blank">Haskell-Cafe@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
<br></blockquote></div><br><br clear="all"><br>-- <br>Thanks and regards,<br>-Damodar Kulkarni<br><br>
<div></div>
<div style id="__af745f8f43-e961-4b88-8424-80b67790c964__"></div>