Hi Daryoush,<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 class="im"><div><br></div><div>What does the type mean in plain english?</div></div></blockquote></div><br><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">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><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-family:arial,sans-serif;font-size:13px;background-color:rgb(255,255,255)">

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

<br></div><div style="background-color:rgb(255,255,255)"><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 class="Apple-tab-span" style="white-space:pre">        </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 class="Apple-tab-span" style="white-space:pre">        </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>