<div dir="ltr"><div>I&#39;ve noticed some suspicious code in base:GHC.IO.Encoding.</div><font face="courier new,monospace"><div> </div><blockquote style="margin-right:0px"><div>setLocaleEncoding, setFileSystemEncoding, setForeignEncoding :: TextEncoding -&gt; IO ()</div>

<div> </div><div>(getLocaleEncoding, setLocaleEncoding)         = mkGlobal initLocaleEncoding</div><div> </div><div>(getFileSystemEncoding, setFileSystemEncoding) = mkGlobal initFileSystemEncoding</div></blockquote><blockquote style="margin-right:0px">

<div>(getForeignEncoding, setForeignEncoding)       = mkGlobal initForeignEncoding</div></blockquote></font><font face="courier new,monospace"><div> </div><blockquote style="margin-right:0px"><div>mkGlobal :: a -&gt; (IO a, a -&gt; IO ())</div>

<div>mkGlobal x = unsafePerformIO $ do</div><div>    x_ref &lt;- newIORef x</div><div>    return (readIORef x_ref, writeIORef x_ref)</div></blockquote></font><blockquote style="margin-right:0px"><div><font face="courier new,monospace"></font> </div>

</blockquote><div>I&#39;ve not elided any pragmas and there&#39;s no relevant LANGUAGE or OPTIONS pragmas.</div><div> </div><div>With HEAD from a couple weeks ago, mkGlobal is not getting inlined. But with some of my experimental alterations of sizeExpr, it is getting inlined.</div>

<div> </div><div>So this code should probably have some of the guards for faking global variables, right?</div></div>