<div dir="ltr"><div>Omer, Eric, Ed: Thanks for the comments.</div><div><br></div>Omer: I think Eric's observation is at play here. We're talking about "dead-code," i.e., a binding that is neither exported, nor used by any binding inside the module. Those seem to be getting dropped by the time user-plugins are run. Unfortunately, this is precisely what one would do with "properties" embedded in code. They serve as documentation perhaps, but are otherwise not needed by any other binding nor it makes sense to export them.<div><br></div><div>Edward: Can you provide some more info into your solution? Sounds like a chicken-egg issue to me: As a plugin author, I need the bindings to access the Ids, and looks like I need the Ids to access the binders?</div><div><br></div><div>A simple solution would be to simply keep all top-level bindings around while the plugin are running, but that obviously can lead to unnecessary work if the code is truly dead. A compromise could be that the annotations can serve as entry points as well: I.e., if there's an annotation on a top-level binder, then it should *not* be considered dead-code at least until after all the plugins are run. That would definitely simplify life. Would that be an acceptable alternative?</div><div><br></div><div>In the mean time, I'm still looking for a solution that doesn't involve exporting such identifiers from modules. As Eric pointed out, that seems to be the only current work-around for the time being.</div><div><br></div><div>Thanks,</div><div><br></div><div>-Levent.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sun, Dec 6, 2015 at 11:08 AM, Eric Seidel <span dir="ltr"><<a href="mailto:eric@seidel.io" target="_blank">eric@seidel.io</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">GHC should only drop un-exported bindings from the ModGuts if they're<br>
also unused, ie *dead code*.<br>
<br>
The only way I know to get around this is to use the bindings somewhere,<br>
or just export them.<br>
<div><div class="h5"><br>
On Sat, Dec 5, 2015, at 23:01, Levent Erkok wrote:<br>
> Hello,<br>
><br>
> The mg_binds field of the ModGuts seem to only contain the bindings that<br>
> are exported from the module being compiled.<br>
><br>
> I guess GHC must be running user-plugins after it drops the bindings that<br>
> are not exported, which makes perfect sense for most use cases. However,<br>
> I'm working on a plugin where the end-programmer embeds "properties" in<br>
> the<br>
> form of functions inside his/her code, which are not necessarily exported<br>
> from the module under consideration.<br>
><br>
> Is there a way to access all top-level bindings in a module from a<br>
> plugin,<br>
> even if those bindings are not exported?<br>
><br>
> Thanks,<br>
><br>
> -Levent.<br>
</div></div>> _______________________________________________<br>
> ghc-devs mailing list<br>
> <a href="mailto:ghc-devs@haskell.org">ghc-devs@haskell.org</a><br>
> <a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs</a><br>
_______________________________________________<br>
ghc-devs mailing list<br>
<a href="mailto:ghc-devs@haskell.org">ghc-devs@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs</a><br>
</blockquote></div><br></div>