You need to enable ScopedTypeVariables, and add a forall to introduce the type variable at the top level. The local variable will then be the *same* &#39;a&#39; instead of a fresh one:<br><br>š {-# LANGUAGE ScopedTypeVariables #-}<br>

<br>š data D a = D1 a | D2 a (a -&gt; a)<br>
<br>
š f :: forall a. Eq a =&gt; D a -&gt; a<br>
š f (D1 x) š = x<br>
š f (D2 x g) = let y :: Eq a =&gt; a<br>
š š š š š š š š š šy = g x<br>
š š š š š š š šin šif x == y then x else g y<br>
<br>
š main = putStr $ shows (f (D2 (1 :: Int) succ)) &quot;\n&quot;<br><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Nov 14, 2012 at 1:03 PM, Serge D. Mechveliani <span dir="ltr">&lt;<a href="mailto:mechvel@botik.ru" target="_blank">mechvel@botik.ru</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Please,<br>
how to correctly set an explicit type for a local value in the body of<br>
a polymorphic function?<br>
<br>
Example (tested under šghc-7.6.1):<br>
<br>
š data D a = D1 a | D2 a (a -&gt; a)<br>
<br>
š f :: Eq a =&gt; D a -&gt; a<br>
š f (D1 x) š = x<br>
š f (D2 x g) = let -- y :: Eq a =&gt; a<br>
š š š š š š š š š šy = g x<br>
š š š š š š š šin šif x == y then x else g y<br>
<br>
š main = putStr $ shows (f (D2 (1 :: Int) succ)) &quot;\n&quot;<br>
<br>
<br>
This is compiled by š šghc --make Main<br>
<br>
Now I need, for a certain reason, to explicitly set the type for šy šin<br>
`let&#39;, šwith the meaning:<br>
&quot;this very `a&#39; which is in the signature for šf&quot;<br>
(and I think that this type Haskell assignes to šy šin š&quot;y = g x&quot;).<br>
<br>
I need to declare this type in a separate line: šy :: &lt;what ever it is&gt;.<br>
<br>
Both š`y :: a&#39; šand š`y :: Eq a =&gt; a&#39; šare not compiled.<br>
<br>
Please, copy the answer to š<a href="mailto:mechvel@botik.ru">mechvel@botik.ru</a><br>
<br>
Thanks,<br>
<br>
------<br>
Sergei<br>
<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" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
</blockquote></div><br></div>