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 <[email protected]> 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 
> 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
> _______________________________________________
> ghc-devs mailing list
> [email protected]
> http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
_______________________________________________
ghc-devs mailing list
[email protected]
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs

Reply via email to