IO also seems to use unboxed (hence strict?) tuples<div><br></div><div><span class="Apple-style-span" style="font-family: &#39;times new roman&#39;; font-size: 16px; "><pre><span class="keyword" style="color: blue; ">newtype</span> <span class="conid">IO</span> <span class="varid">a</span> <span class="keyglyph" style="color: red; ">=</span> <span class="conid">IO</span> <span class="layout" style="color: red; ">(</span><span class="conid">State</span><span class="cpp">#</span> <span class="conid">RealWorld</span> <span class="keyglyph" style="color: red; ">-&gt;</span> <span class="layout" style="color: red; ">(</span><span class="cpp">#</span> <span class="conid">State</span><span class="cpp">#</span> <span class="conid">RealWorld</span><span class="layout" style="color: red; ">,</span> <span class="varid">a</span> <span class="cpp">#</span><span class="layout" style="color: red; ">)</span><span class="layout" style="color: red; ">)</span></pre>
</span><div>Not sure if this is just for performance, but if the strictness is required, here we have the horrible hack again then (would behave different without it?). I guess it works because when applying primitive function likes putChar#, these could be considered as fully strict, since putChar# c really does force evaluation of c strictly and puts in the screen. This is different from the lazy IO situation, where a string is concatenated lazily, and put on the screen by the consumer as soon as it&#39;s available. Ah I&#39;m having troubles to explain myself formally, never mind :)</div>
<div><br></div><div>Actually RealWorld is not defined in that file, it is defined here, but hidden</div><div><br></div><div><a href="file:///C:/app/ghp/doc/libraries/ghc-prim/GHC-Prim.html#t%3ARealWorld">file:///C:/app/ghp/doc/libraries/ghc-prim/GHC-Prim.html#t%3ARealWorld</a></div>
<div><br></div><div>But I don&#39;t understand the comment</div><div><br></div><div><span class="Apple-style-span" style="font-family: -webkit-sans-serif; font-size: 16px; "><table class="vanilla" cellspacing="0" cellpadding="0" style="width: 1643px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; ">
<tbody><tr><td class="topdecl" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 2px; padding-right: 2px; padding-bottom: 2px; padding-left: 2px; background-color: rgb(240, 240, 240); font-family: monospace; vertical-align: top; ">
<table class="declbar" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; "><tbody><tr><td class="declname" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; width: 1584px; ">
<span class="keyword" style="text-decoration: underline; ">data</span> <a name="t:RealWorld"></a><a name="t%3ARealWorld"></a><b>RealWorld</b></td><td class="declbut" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 1px; padding-left: 5px; padding-right: 5px; border-left-color: rgb(0, 0, 153); border-left-style: solid; white-space: nowrap; font-size: small; ">
<a href="file:///C:/app/ghp/doc/libraries/ghc-prim/src/GHC-Prim.html#RealWorld" style="color: rgb(0, 0, 224); text-decoration: none; ">Source</a></td></tr></tbody></table></td></tr><tr><td class="body" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-left: 10px; ">
<table class="vanilla" cellspacing="0" cellpadding="0" style="width: 1633px; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; "><tbody><tr><td class="ndoc" style="border-top-width: 0px; border-right-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 2px; padding-right: 2px; padding-bottom: 2px; padding-left: 2px; ">
<tt style="font-size: 13px; ">RealWorld</tt> is deeply magical. It is <em>primitive</em>, but it is not <em>unlifted</em> (hence <tt style="font-size: 13px; ">ptrArg</tt>). We never manipulate values of type <tt style="font-size: 13px; ">RealWorld</tt>; it&#39;s only used in the type system, to parameterise <tt style="font-size: 13px; ">State#</tt>.</td>
</tr></tbody></table></td></tr><tr></tr></tbody></table><br></span></div><div><font class="Apple-style-span" face="-webkit-sans-serif" size="4"><span class="Apple-style-span" style="font-size: 16px;"><span class="Apple-style-span" style="font-family: arial; font-size: 13px; "><div>
Maybe I should reread the papers, but it seems lots of magic is needed to get IO right (such as the existential types to make sure <span class="Apple-style-span" style="border-collapse: collapse; white-space: pre-wrap; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; ">different state threads are kept separate)</span></div>
<div><span class="Apple-style-span" style="border-collapse: collapse; white-space: pre-wrap; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;"><br></span></div></span></span></font></div><div>
<div class="gmail_quote">On Fri, Aug 21, 2009 at 10:52 AM, Bayley, Alistair <span dir="ltr">&lt;<a href="mailto:Alistair.Bayley@invesco.com">Alistair.Bayley@invesco.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
&gt; From: <a href="mailto:haskell-cafe-bounces@haskell.org">haskell-cafe-bounces@haskell.org</a><br>
&gt; [mailto:<a href="mailto:haskell-cafe-bounces@haskell.org">haskell-cafe-bounces@haskell.org</a>] On Behalf Of Bulat Ziganshin<br>
&gt; To: Peter Verswyvelen<br>
<div class="im">&gt;<br>
&gt; &gt; But how does GHC implement the RealWorld internally? I guess<br>
&gt;<br>
&gt; look the &quot;base&quot; library sources for &quot;RealWorld&quot;<br>
<br>
</div><a href="http://www.haskell.org/ghc/docs/latest/html/libraries/base/src/GHC-IOBas
e.html#IO" target="_blank">http://www.haskell.org/ghc/docs/latest/html/libraries/base/src/GHC-IOBas<br>
e.html#IO</a><br>
*****************************************************************<br>
Confidentiality Note: The information contained in this message,<br>
and any attachments, may contain confidential and/or privileged<br>
material. It is intended solely for the person(s) or entity to<br>
which it is addressed. Any review, retransmission, dissemination,<br>
or taking of any action in reliance upon this information by<br>
persons or entities other than the intended recipient(s) is<br>
prohibited. If you received this in error, please contact the<br>
sender and delete the material from any computer.<br>
*****************************************************************<br>
<br>
</blockquote></div><br></div></div>