Skip to content
Snippets Groups Projects
Commit 500d8cb8 authored by Jade's avatar Jade :speech_balloon: Committed by Marge Bot
Browse files

prevent GHCi (and runghc) from suggesting other symbols when not finding main

Fixes: #23996
parent 5a932cf2
No related branches found
No related tags found
No related merge requests found
......@@ -1622,13 +1622,24 @@ pprInfo (thing, fixity, cls_insts, fam_insts, docs)
runMain :: GhciMonad m => String -> m ()
runMain s = case toArgsNoLoc s of
Left err -> liftIO (hPutStrLn stderr err)
Right args ->
do dflags <- getDynFlags
let main = fromMaybe "main" (mainFunIs dflags)
-- Wrap the main function in 'void' to discard its value instead
-- of printing it (#9086). See Haskell 2010 report Chapter 5.
doWithArgs args $ "Control.Monad.void (" ++ main ++ ")"
Left err -> liftIO (hPutStrLn stderr err)
Right args -> doWithMain (doWithArgs args)
where
doWithMain fun = do
dflags <- getDynFlags
let main = fromMaybe "main" (mainFunIs dflags)
handleSourceError printErrAndMaybeExit $ do
-- doing this will prevent the main to run when it is not in scope
-- this might seem useless, but it doesn't suggest other functions
-- to be used, which is exactly what we want here. See #23996.
_ <- GHC.parseName main
-- Wrap the main function in 'void' to discard its value instead
-- of printing it (#9086). See Haskell 2010 report Chapter 5.
fun $ "Control.Monad.void (" ++ main ++ ")"
-----------------------------------------------------------------------------
-- :run
......
<interactive>:0:53: error: [GHC-88464]
Variable not in scope: main :: IO a0
Suggested fix: Perhaps use ‘min’ (imported from Prelude)
<interactive>:1:1: error: [GHC-76037]
Not in scope: ‘main’
1
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment