data SPair a b = SPair a b deriving (Show) mysum (SPair accsum acclen) [] = (accsum, acclen) mysum (SPair accsum acclen) (x:xs) = mysum p xs where p = SPair (accsum + x) (acclen + 1) main = putStrLn $ show $ mysum (SPair 0 0) (take 100000 [1..])