Thanks Eugene and Ozgur.<br>I also looked on the side of IORef, but it doesn&#39;t looked to be a good solution since we have to use unsafePerformIO.<br><br>I have a big program to modify, and I want to pass some new data to existing functions of type IO(). I&#39;d like to avoid changing all the function&#39;s types down the chain... What is the best way to do that?<br>
<br><br><br><div class="gmail_quote">On Wed, Aug 29, 2012 at 11:43 AM, Ozgur Akgun <span dir="ltr">&lt;<a href="mailto:ozgurakgun@gmail.com" target="_blank">ozgurakgun@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im"><div class="gmail_quote">On 29 August 2012 10:21, Corentin Dupont <span dir="ltr">&lt;<a href="mailto:corentin.dupont@gmail.com" target="_blank">corentin.dupont@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


<div><i>f,g :: IO ()<br>f = withFile &quot;toto&quot; WriteMode (flip hPutStr &quot;42&quot;)<br>

g = withFile &quot;toto&quot; ReadMode hGetLine &gt;&gt;= (\s -&gt; putStrLn $ &quot;Answer:&quot; ++ s)<br>
main = f &gt;&gt; g</i><br><br>Is it possible to do the same without files (the types must remain IO())?</div></blockquote></div><br></div>One can use an IORef to get a similar effect.<div><br></div><div><div><font face="courier new, monospace">import Data.IORef</font></div>


<div><font face="courier new, monospace">import System.IO.Unsafe</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">{-# NOINLINE toto #-}</font></div><div><font face="courier new, monospace">toto :: IORef String</font></div>


<div><font face="courier new, monospace">toto = unsafePerformIO (newIORef &quot;&quot;)</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">f,g :: IO ()</font></div>


<div><font face="courier new, monospace">f = writeIORef toto &quot;42&quot;</font></div><div><font face="courier new, monospace">g = readIORef toto &gt;&gt;= (\s -&gt; putStrLn $ &quot;Answer:&quot; ++ s)</font></div><div>


<font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">main = f &gt;&gt; g</font></div><div><br></div><div>HTH,</div><div>Ozgur</div>
</div>
</blockquote></div><br>