timeIt :: String -> IO a -> IO a
timeIt str io = do
  performMajorGC
  t0 <- getCurrentTime
  a <- io
  t1 <- getCurrentTime
  printf "%s: %.2f\n" str (realToFrac (t1 `diffUTCTime` t0) :: Double)
  return a
timeIt :: String -> IO a -> IO a
timeIt str io = do
  performMajorGC
  t0 <- getCurrentTime
  a <- io
  t1 <- getCurrentTime
  printf "%s: %.2f\n" str (realToFrac (t1 `diffUTCTime` t0) :: Double)
  return a
timeIt str io = do
  performMajorGC
  t0 <- getCurrentTime
  a <- io
  t1 <- getCurrentTime
  printf "%s: %.2f\n" str (realToFrac (t1 `diffUTCTime` t0) :: Double)
  return a