registerTimeout can wait too little because it uses Doubles for times
getMonotonicTime :: IO Double and thus goes a roundtrip to
Double when it is perfectly possible to always work on integers instead (
getMonotonicTime obtains integers and then converts it).
This can result in functions like
timeout to wait too little, as e.g.
timeout 4 is converted to
3.997420 seconds, which can violate standard expecations of programs that it will wait at least as much as demanded.
We should export and use the integer based function GHC.getMonotonicNSec that
Not going through Double will also make inspecting e.g.
strace more obvious.