As i understand it, the monomorphism restriction applies to &quot;constrained type variables&quot;, but c :: forall a. a, so it remains polymorphic and each of its uses can be instantiated to a different type.<br><br><div>
<span class="gmail_quote">2007/12/25, Henning Thielemann &lt;<a href="mailto:lemming@henning-thielemann.de">lemming@henning-thielemann.de</a>&gt;:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>I thought I understand monomorphism restriction. But it seems, I don&#39;t. I<br>have boilt down my problem to the following test. Don&#39;t try to make any<br>sense of it, it is just the smallest code I could come up with.
<br><br><br>test :: (Integral a, RealFrac a) =&gt; a<br>test =<br>&nbsp;&nbsp; let c = undefined<br>&nbsp;&nbsp; in&nbsp;&nbsp;asTypeOf (round c) c<br><br><br>When compiling I get:<br><br>Compiling StorableInstance ( src/StorableInstance.hs, interpreted )
<br><br>src/StorableInstance.hs:38:17:<br>&nbsp;&nbsp;&nbsp;&nbsp;Warning: Defaulting the following constraint(s) to type `Double&#39;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; `RealFrac a&#39; arising from use of `round&#39; at src/StorableInstance.hs:38:17-21<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; In the first argument of `asTypeOf&#39;, namely `(round c)&#39;
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; In the definition of `test1&#39;: test1 = let c = undefined in asTypeOf (round c) c<br>_______________________________________________<br>Haskell-Cafe mailing list<br><a href="mailto:Haskell-Cafe@haskell.org">
Haskell-Cafe@haskell.org</a><br><a href="http://www.haskell.org/mailman/listinfo/haskell-cafe">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br></blockquote></div><br>