Answer originally given by user ysdx on programmers:
Indeed you version will not benchmark your algorithm. As
ris not used it will not be evaluated at all.You should be able to do it with DeepSeq:
benchmark :: [String] -> IO Integer benchmark inputList = do start <- getCPUTime let r = foo inputList end <- r `deepseq` getCPUTime return (end - start)(
a `deepseq` b) is some “magic” expression which forces the complete/recursive evaluation ofabefore returningb.