import Control.DeepSeq (deepseq) -- explicit type declaration needed for deepseq (but not seq!) mysum :: (Integer, Int) -> [Integer] -> (Integer, Int) mysum (accsum, acclen) [] = (accsum, acclen) mysum (accsum, acclen) (x:xs) = p `deepseq` (mysum p xs) where p = (accsum + x, acclen + 1) main = putStrLn $ show $ mysum (0, 0) (take 100000 [1..])