Search code examples
haskellcompiler-errorsdelaysleep

How to sleep or delay the thread in Haskell?


This really shouldn't be so difficult to find an answer to, but alas I don't... I want to delay the next execution step in a do block. I have found the functions delay, sleep, nanosleep and usleep.

And also this question, that doesn't cover how to use any of these, however: Sleep in Haskell.

I am getting the same error for all of these, so probably I am doing something wrong fundamentally:

Variable not in scope: delay :: Integer -> IO a0

This is my test snippet:

main = do
  {
    putStrLn "line 1"
  ; delay 2
  ; putStrLn "line 2"
  }

Googling the error does not actually yield anything useful for some reason.


Solution

  • Well, you have to import Control.Concurrent first:

    import Control.Concurrent
    
    threadDelay 1000000 --sleep for a million microseconds, or one second