Stop using "Int" for microsecond delays in "base"

Henning Thielemann schlepptop at
Sat Mar 26 20:16:16 CET 2011

Paul Johnson schrieb:
> The "base" library has the "threadDelay" primitive, which takes an Int
> argument in microseconds.  Unfortunately this means that the longest
> delay you can get on a 32 bit machine with GHC is just under 36 minutes
> (2^31 uSec), and a hypothetical compiler that only used 30 bit integers
> (as per the standard) would get under 10 minutes.  It is a bit tricky to
> write general-purpose libraries with this.

Isn't it just a

waitLong :: Integer -> IO ()
waitLong n =
   let stdDelay = 10^7
       (q,r) = divMod n stdDelay
   in  replicateM_ (fromInteger q) (threadDelay (fromInteger stdDelay))
        >> threadDelay (fromInteger r)

More information about the Libraries mailing list