<div class="gmail_quote">On Thu, Oct 25, 2012 at 9:56 AM, José Pedro Magalhães <span dir="ltr">&lt;<a href="mailto:jpm@cs.uu.nl" target="_blank">jpm@cs.uu.nl</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi all,<br><br>Following up on a chat with Simon Peyton Jones at ICFP, I would like to discuss the<br>possible introduction of a EPHEMERAL pragma. For example:<br><br><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class="gmail_quote">


{-# EPHEMERAL Rep #-}<br>data Rep = ...<br></blockquote><br>This pragma would indicate that the programmer intends the Rep datatype not to<br>be present in the final generated core code. Its proposed semantics are the following:<br>


<br>1. Make the compiler very keen to inline any functions that produce or consume Rep.<br><br>2. If Rep is exported, make all functions that operate on Rep INLINABLE (that is, make<br>their code available for inlining in other modules).<br>


<br>3. Emit a warning if the generated core code still contains uses of Rep.<br></blockquote><div><br></div><div>Won&#39;t all of this require GHC to fix its handling of inlining in the presence of recursion (am I behind times?  Or does Rep also end up with the restriction that it should never be an argument to or result from a recursive function?</div>
<div><br></div><div>-Jan</div><div> </div></div>