<br><font size=2 face="sans-serif">What does the Haskell type system do
with expressions such as these . . . ?</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp;show 1</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp;show (1+2)</font>
<br>
<br><font size=2 face="sans-serif">The type of the subexpressions &quot;1&quot;
and &quot;1+2&quot; are &quot;ambiguous&quot; since they have type &quot;(Num
a) =&gt; a&quot;. &nbsp;I'm under the assumption before &quot;1+2&quot;
is evaluated, the &quot;1&quot; and &quot;2&quot; must be coerced into
a &quot;concrete&quot; type such as Int, Integer, Double, etc, and before
&quot;show 1&quot; is evaluated, the &quot;1&quot; must be coerced into
a &quot;concrete&quot; type. &nbsp;Is my assumption correct? &nbsp;If so,
how does Haskell know into which type to coerce the subexpressions?</font>
<br>
<br><font size=2 face="sans-serif">If I try to write a new function, &quot;my_show&quot;,
which converts an expression into a string representation that includes
type information, I run into errors with expressions like &quot;show 1&quot;
and &quot;show (1+2)&quot; because of the type ambiguity.</font>
<br>
<br><font size=2 face="sans-serif">class (Show a) =&gt; My_show a where</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp;my_show :: a -&gt; String</font>
<br>
<br><font size=2 face="sans-serif">instance My_show Int where</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp;my_show a = show a ++ &quot;
:: Int&quot;</font>
<br>
<br><font size=2 face="sans-serif">instance My_show Integer where</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp;my_show a = show a ++ &quot;
:: Integer&quot;</font>
<br>
<br><font size=2 face="sans-serif">I can avoid the errors if I change it
to &quot;my_show (1::Int)&quot; or &quot;my_show ((1+2)::Int). &nbsp;I'm
wondering what the difference is between, my_show and Haskell's built-in
show that causes my_show to produce an error message when it is used with
ambiguous types, but Haskell's show works okay with ambiguous types.</font>
<br>
<br>
<br>
<br>