> In practice if you want to actually _use_ ST you'll find you'll need to
let the world escape into your type. Otherwise you won't be able to
create and pass around any STRefs or arrays and use them later. <br>&gt; The
universal quantification inside of MyST&#39;s definition will keep you from
holding on to them.<br><br>Okay, what you are saying is that two MyST action declared separately will not be compatible, right?<br><br><br>I have another problem. One of my goal is to be able to alter an STRef when it is accessed. To do so, I use the following type:<br>

STRef s (ST s a).<br>So the actual variable &#39;a&#39; contained by my STRef is wrapped inside an ST action which goal is to modify the STRef and then return the value of type &#39;a&#39;.<br>My problem is that the STRef is not modfied, it always returns the same value.<br>

<br>Example of this with IORefs, it is simpler to test:<br><br><span style="font-family: courier new,monospace;">selfAlteringRef :: Int -&gt; IO (IORef (IO Int))</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">selfAlteringRef init = mfix $ \ref -&gt;<br>

</span><span style="font-family: courier new,monospace;">  newIORef $ do<br>    writeIORef ref (return 0)<br>    return init<br><br></span><span style="font-family: courier new,monospace;"></span><br><div class="gmail_quote">

2011/3/10 Edward Kmett <span dir="ltr">&lt;<a href="mailto:ekmett@gmail.com">ekmett@gmail.com</a>&gt;</span><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

<div><div class="gmail_quote"><div class="im">On Wed, Mar 9, 2011 at 6:21 PM, Yves Parès <span dir="ltr">&lt;<a href="mailto:limestrael@gmail.com" target="_blank">limestrael@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">


Well, I want to hide the fact that I&#39;m using ST, so if I can hide the existential type &#39;s&#39; it is better.<br></blockquote><div class="gmail_quote"><br></div></div>In practice if you want to actually _use_ ST you&#39;ll find you&#39;ll need to let the world escape into your type. Otherwise you won&#39;t be able to create and pass around any STRefs or arrays and use them later. The universal quantification inside of MyST&#39;s definition will keep you from holding on to them.<div class="im">

<div>
<br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">BTW, does someone know why the ST default implementation (the one exposed by <a href="http://Control.Monad.ST" target="_blank">Control.Monad.ST</a>) is strict, whereas those of State et Writer are lazy?<br>


</blockquote><div><br></div></div><div>Mostly because of the principle of least surprise. It makes it act more like IO.</div><div><br></div><div>-Edward</div><div><br></div></div></div>
</blockquote></div><br>