GHC API `runStmt` overrides qualified import of `it` variable
The runStmt
function in InteractiveEval
creates an it
variable storing the last result. However, this variable somehow shadows qualified variables with the name it
. For instance, importing Test.Hspec, running any statement, and then trying to use Test.Hspec.it (qualified) results in an "out of scope" error.
The following small program demonstrates this:
import GHC
import GhcMonad
import Outputable
import GHC.Paths
main = runGhc (Just libdir) $ do
flags <- getSessionDynFlags
setSessionDynFlags (flags{ hscTarget = HscInterpreted, ghcLink = LinkInMemory})
imps <- mapM parseImportDecl ["import Prelude", "import Test.Hspec"]
setContext (map IIDecl imps)
-- With the next line, you get an "Not in scope" exception.
-- If you comment out this runStmt, it runs without error and prints the type.
runStmt "3" RunToCompletion
exprType "Test.Hspec.it" >>= (liftIO . putStrLn . showPpr flags)
GHCi somehow avoids this, but I have no idea how and could not figure it out from the sources.
What's going on?
Trac metadata
Trac field | Value |
---|---|
Version | 7.6.3 |
Type | Bug |
TypeOfFailure | OtherFailure |
Priority | normal |
Resolution | Unresolved |
Component | GHC API |
Test case | |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | |
Operating system | |
Architecture |