{-# LANGUAGE BangPatterns #-} module HaskellWorks.Diagnostics.Time where import System.CPUTime measure :: a -> IO a measure a = measureIO (return a) measureIO :: IO a -> IO a measureIO a = do start <- getCPUTime !b <- a end <- getCPUTime putStrLn $ show ((end - start) `div` 1000000000) ++ " ms" return b