
I'm trying to do some performance evaluation and I'm stuck with the fact that Haskell's lazy evaluation - which make my sort extremely fast :) I read this page: http://www.haskell.org/haskellwiki/Performance/Strictness but I didn't get it so I'm asking here: How do I make the function 'measure' to actually force the evaluation of (f p)? Thanks, ovidiu See the code below: ------------------------------------ module Main where import Prelude import Data.List import Data.Time.Clock import System.Random quickSort [] = [] quickSort (x:xs) = (quickSort small) ++ [x] ++ (quickSort big) where small = [p | p <- xs, p <= x] big = [p | p <- xs, p > x] randomlist :: Int -> StdGen -> [Int] randomlist n = take n . unfoldr (Just . random) len = 10 ^ 10 measure f p = do t1 <- getCurrentTime let sorted = f p t2 <- getCurrentTime let diff = diffUTCTime t2 t1 return diff main = do seed <- newStdGen let rs = randomlist len seed putStrLn $ "Sorting " ++ (show len) ++ " elements..." t <- measure quickSort rs putStrLn $ "Time elapsed: " ++ (show t)