[GHC] #11078: Access to module renaming with reifyModule, in TemplateHaskell
GHC
ghc-devs at haskell.org
Tue Nov 17 12:50:23 UTC 2015
#11078: Access to module renaming with reifyModule, in TemplateHaskell
-------------------------------------+-------------------------------------
Reporter: cipher1024 | Owner:
Type: feature request | Status: new
Priority: normal | Milestone: 8.0.1
Component: Template Haskell | Version: 7.10.2
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture:
| Unknown/Multiple
Type of failure: None/Unknown | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Rev(s):
Wiki Page: |
-------------------------------------+-------------------------------------
Comment (by jstolarek):
I just had a quick look at the code. Let's assume we are using definition
proposed by Richard (slightly modified by me):
{{{#!hs
data ImportType = Qualified | Unqualified
deriving( Show, Eq, Ord, Data, Typeable, Generic )
data ModuleImport = ModuleImport Module -- ^ Imported module
ImportType -- ^ qualified?
(Maybe String) -- ^ synonym
[Name] -- ^ imported names
deriving( Show, Eq, Ord, Data, Typeable, Generic )
}}}
I understand that the place where we need to fill in these fields is
`TcSplice.reifyModule`. At least that is the place where the build fails
for me after I make changes to TH syntax.
In `TcM` we have access to `getImports`, which gives us a list of
`Module`s, each with an assigned `ImportedModsVal`:
{{{#!hs
type ImportedMods = ModuleEnv [ImportedModsVal]
data ImportedModsVal
= ImportedModsVal {
imv_name :: ModuleName, -- ^ The name the module is
imported with
imv_span :: SrcSpan, -- ^ the source span of the whole
import
imv_is_safe :: IsSafeImport, -- ^ whether this is a safe import
imv_is_hiding :: Bool, -- ^ whether this is an "hiding"
import
imv_all_exports :: GlobalRdrEnv -- ^ all the things the module
could provide
}
}}}
Now, in `reifyModule` we need the following:
1. `Module`: this is readily available and created by the existing
implementation (see `TcSplice.modToTHMod`.
2. `ImportType`: I can't figure out how we could acces that one
3. `Maybe String`, aka the module synonym. I would look at `imv_name` to
see what exactlt it holds. Also, I would adjust TH representation to work
nicely with information stored in that field.
4. `[Name]` - it seems that this can be extracted from `imv_all_exports`.
Does that allow to make progress?
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/11078#comment:12>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list