runmemo-1.0.0.0: test/test-race.hs
module Main where
import Data.MemoCombinators as Memo
import Data.RunMemo
import System.Exit
import Data.Time.Clock
fib :: Memoizable (Integer -> Integer)
fib self = go
where go 0 = 1
go 1 = 1
go n = self (n-1) + self (n-2)
time :: IO () -> IO NominalDiffTime
time a = do
start <- getCurrentTime
a
stop <- getCurrentTime
return $ diffUTCTime stop start
main :: IO ()
main = do
putStrLn "Evaluating with Memo.integral"
mtime <- time $ runMemo Memo.integral fib 30 `seq` putStrLn "Evaluated"
putStrLn "Evaluating with noMemo"
ntime <- time $ runMemo noMemo fib 30 `seq` putStrLn "Evaluated"
if mtime < ntime
then exitSuccess
else exitFailure