On Thu, Oct 25, 2012 at 9:56 AM, José Pedro Magalhães <jpm@cs.uu.nl> wrote:
Hi all,

Following up on a chat with Simon Peyton Jones at ICFP, I would like to discuss the
possible introduction of a EPHEMERAL pragma. For example:

{-# EPHEMERAL Rep #-}
data Rep = ...

This pragma would indicate that the programmer intends the Rep datatype not to
be present in the final generated core code. Its proposed semantics are the following:

1. Make the compiler very keen to inline any functions that produce or consume Rep.

2. If Rep is exported, make all functions that operate on Rep INLINABLE (that is, make
their code available for inlining in other modules).

3. Emit a warning if the generated core code still contains uses of Rep.

Are you restricting Rep to non-recursive uses?  Or has GHC's inliner finally learned how to behave well in the presence of recursion?

-Jan-Willem Maessen