<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 id=":121"><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>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>