Name of units in plugins

Spiwack, Arnaud arnaud.spiwack at
Mon Feb 18 08:09:26 UTC 2019

Indeed, I missed the package-qualifer in findImportedModule. It does look
plausible. If there is no recommended/better way to do this sort of thing,
I think I'll go for it.

If other plugin authors want to share their experience on what worked and
didn't for them. I'd love to hear it, too. Seems like a common sort of
problems in plugins.


On Fri, Feb 15, 2019 at 9:41 AM Matthew Pickering <
matthewtpickering at> wrote:

> Did you have a look at the implementation of `findImportedModule`? I
> think you can use it and set the final argument to `Just
> "assert-plugin"` so that it only looks for the module in the
> `assert-plugin` package.
> Another way people do this is to use a Template Haskell quote and then
> use `GhcPlugins.thNameToGhcName`. Which is probably the most robust
> way of persisting a name between the two stages.
> Cheers,
> Matt
> On Fri, Feb 15, 2019 at 8:31 AM Spiwack, Arnaud <arnaud.spiwack at>
> wrote:
> >
> > 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
> ). 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 (
> ).
> >
> > 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
> > _______________________________________________
> > ghc-devs mailing list
> > ghc-devs at
> >
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the ghc-devs mailing list