benchmark :: String -> IO a -> IO ()
benchmark name io = do
	putStrLn $ "Starting " ++ name ++ "…"
	start <- getCPUTime
	_ <- io
	end <- getCPUTime
	let t = fromInteger (end - start) / (1000000000000 :: Double)
	putStrLn $ name ++ " done in " ++ show t ++ " seconds."


benchmark :: String -> IO a -> IO ()
benchmark name io = do
	putStrLn $ "Starting " ++ name ++ "…"
	start <- getCPUTime
	_ <- io
	end <- getCPUTime
	let t = fromInteger (end - start) / (1000000000000 :: Double)
	putStrLn $ name ++ " done in " ++ show t ++ " seconds."
benchmark name io = do
	putStrLn $ "Starting " ++ name ++ "…"
	start <- getCPUTime
	_ <- io
	end <- getCPUTime
	let t = fromInteger (end - start) / (1000000000000 :: Double)
	putStrLn $ name ++ " done in " ++ show t ++ " seconds."