You could do this:<br><br>r :: IORef [a]<br>r = unsafePerformIO $ newIORef []<br><br>cast :: a -&gt; b<br>cast a = unsafePerformIO $ do<br>&nbsp;&nbsp;&nbsp; writeIORef r [a]<br>&nbsp;&nbsp;&nbsp; x &lt;- readIORef r<br>&nbsp;&nbsp;&nbsp; return $ head x<br><br><br><div>
<span class="gmail_quote">On 9/26/07, <b class="gmail_sendername">Dan Piponi</b> &lt;<a href="mailto:dpiponi@gmail.com">dpiponi@gmail.com</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
On 9/26/07, Lennart Augustsson &lt;<a href="mailto:lennart@augustsson.net">lennart@augustsson.net</a>&gt; wrote:<br>&gt; Things can go arbitrarily wrong if you misuse unsafePerformIO, you can even<br>&gt; subvert the type system.
<br><br>So...if I was in a subversive kind of mood (speaking hypothetically),<br>what would I have to do?<br>--<br>Dan<br><br>&gt;<br>&gt;<br>&gt; On 9/26/07, Jorge Marques Pelizzoni &lt; <a href="mailto:jpeliz@icmc.usp.br">
jpeliz@icmc.usp.br</a>&gt; wrote:<br>&gt; &gt;<br>&gt; &gt; Hi, all!<br>&gt; &gt;<br>&gt; &gt; This is a newbie question: I sort of understand what unsafePerformIO does<br>&gt; &gt; but I don&#39;t quite get its consequences. In short: how safe can one be in
<br>&gt; &gt; face of it? I mean, conceptually, it allows any Haskell function to have<br>&gt; &gt; side effects just as in any imperative language, doesn&#39;t it? Doesn&#39;t it<br>&gt; &gt; blow up referential transparency for good? Is there anything intrinsic to
<br>&gt; &gt; it that still keeps Haskell &quot;sound&quot; no matter what unsafePerformIO users<br>&gt; &gt; do (unlikely) or else what are the guidelines we should follow when using<br>&gt; &gt; it?<br>&gt; &gt;<br>&gt; &gt; Thanks in advance. Cheers,
<br>&gt; &gt;<br>&gt; &gt; Jorge.<br>&gt; &gt;<br>&gt; &gt; _______________________________________________<br>&gt; &gt; Haskell-Cafe mailing list<br>&gt; &gt; <a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org
</a><br>&gt; &gt; <a href="http://www.haskell.org/mailman/listinfo/haskell-cafe">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>&gt; &gt;<br>&gt;<br>&gt;<br>&gt; _______________________________________________
<br>&gt; Haskell-Cafe mailing list<br>&gt; <a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>&gt; <a href="http://www.haskell.org/mailman/listinfo/haskell-cafe">http://www.haskell.org/mailman/listinfo/haskell-cafe
</a><br>&gt;<br>&gt;<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>