Skip to content

Improved help for "import" command at the start of a script when "variable not in scope" in error msg

The piece of code that bgamari wrote in #13891 is interesting from the point of view of the error messages.\\

main = do
    putStrLn "forking"
    forkIO $ bracket (putStrLn "forked") (const $ putStrLn "finalize") (const $ putStrLn "hello" >> threadDelay 100000000)
    threadDelay 10000
    putStrLn "done" 

When the imports are not written GHC answers.\\

Prelude> :l testfork
[1 of 1] Compiling Main             ( testfork.hs, interpreted )

testfork.hs:6:5: error:
    Variable not in scope: forkIO :: t0 -> IO a0

testfork.hs:6:14: error:
    Variable not in scope:
      bracket :: IO () -> (b1 -> IO ()) -> (b0 -> IO b2) -> t0

testfork.hs:6:101: error:
    Variable not in scope: threadDelay :: Integer -> IO b2

testfork.hs:7:5: error:
    Variable not in scope: threadDelay :: Integer -> IO a1
Failed, modules loaded: none.
Prelude>

It would be advisable to complete by:\\ Perhaps you intended to import Control.Concurrent for forkIO and threadDelay.\\

Perhaps you intended to import Control.Exception for bracket.\\ I hope you have a way to write it once for all the variables involved.

Trac metadata
Trac field Value
Version 8.0.2
Type FeatureRequest
TypeOfFailure OtherFailure
Priority normal
Resolution Unresolved
Component Compiler
Test case
Differential revisions
BlockedBy
Related
Blocking
CC
Operating system
Architecture
Edited by vanto
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information