RosettaCodeData/Task/Time-a-function/Haskell/time-a-function.hs

14 lines
470 B
Haskell
Raw Permalink Normal View History

2017-09-23 10:01:46 +02:00
import System.CPUTime (getCPUTime)
2013-04-11 01:07:29 -07:00
-- We assume the function we are timing is an IO monad computation
timeIt :: (Fractional c) => (a -> IO b) -> a -> IO c
2017-09-23 10:01:46 +02:00
timeIt action arg = do
startTime <- getCPUTime
action arg
finishTime <- getCPUTime
return $ fromIntegral (finishTime - startTime) / 1000000000000
2013-04-11 01:07:29 -07:00
-- Version for use with evaluating regular non-monadic functions
2017-09-23 10:01:46 +02:00
timeIt_ :: (Fractional c) => (a -> b) -> a -> IO c
timeIt_ f = timeIt ((`seq` return ()) . f)