Name of units in plugins

Spiwack, Arnaud arnaud.spiwack at tweag.io
Fri Feb 15 08:30:17 UTC 2019


Dear all,

(first, I don't know if this is the best place for questions/discussions
about the GHC API, if not, let me know where to redirect the conversation).

I've been writing a plugin that substitutes call to a function by calls to
another (it's a plugin reimplementation of the assert feature of GHC). And
to be able to point at the names of these two functions, I need to
construct a name (well, and OccName) made of three parts: unit id, module
name, definition name.

This question is about the unit name. Currently I simply use
stringToUnitId. But the real name of my unit has a magic string in it (see
https://github.com/aspiwack/assert-plugin/blob/a538d72581bae43ebf44c332e19c5ffdd28911df/src/With/Assertions.hs#L53
). It's rather unpleasant, it seems to change every time the cabal file
change (at least).

The assert-explainer plugin uses another approach, only using the module
name, then calling findImportedModule (
https://github.com/ocharles/assert-explainer/blob/dc6ea213d4d0576954ec883eeabeafc80c5ca18f/plugin/AssertExplainer.hs#L71-L81
).

This is much more robust to changes, but is also less precise (technically,
there can be several imported modules with the same name, with
package-qualified imports).

So, the question is: is there a better, recommended way to recover the
OccName (or Name!) of a function I defined in the same unit my plugin is
defined in.

Best,
Arnaud
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-devs/attachments/20190215/cd9e9a10/attachment.html>


More information about the ghc-devs mailing list