Note [Top-level Names in Template Haskell decl quotes]
See also: Note [Interactively-bound Ids in GHCi] in GHC.Driver.Env
Note [Looking up Exact RdrNames] in GHC.Rename.Env
Consider a Template Haskell declaration quotation like this:
module M where
f x = h [d| f = 3 |]
When renaming the declarations inside [d| ...|], we treat the
top level binders specially in two ways
1. We give them an Internal Name, not (as usual) an External one.
This is done by GHC.Rename.Env.newTopSrcBinder.
2. We make them *shadow* the outer bindings.
See Note [GlobalRdrEnv shadowing]
3. We find out whether we are inside a [d| ... |] by testing the TH
level. This is a slight hack, because the level field was really
meant for the type checker, and here we are not interested in the
fields of Brack, hence the error thunks in thRnBrack. References 2
- Looking up Exact RdrNames GHC.Rename.Env
- GlobalRdrEnv shadowing GHC.Types.Name.Reader
Referenced by 4
- GHC.Rename.Env call site
- GHC.Rename.Names call site
- GlobalRdrEnv shadowing GHC.Types.Name.Reader
- GHC.Types.Name.Reader call site