-- -- addition of very long integers -- import Data.Char import Data.String addRev [] [] 0 = [] addRev la [] c = addRev la [0] c addRev [] lb c = addRev [0] lb c addRev (a:la) (b:lb) c = q : (addRev la lb p) where (p,q) = divMod (a+b+c) 10 add la lb = reverse (addRev (reverse la) (reverse lb) 0) stringToDigits s = map digitToInt s digitsToString l = map intToDigit l intToDigits n = map digitToInt (show n) digitsToInt :: [Int] -> Integer digitsToInt s = read (digitsToString s) verifyAdd m n = ((digitsToInt (add (intToDigits m) (intToDigits n))) - (m+n)) == 0 main = do print (digitsToString (add (stringToDigits "67544539703981792301876431982341329878656543656") (stringToDigits "923409765450275928347539864398234659"))) print (all (id) [verifyAdd x y | x <- [12000..13000], y <- [7500..8500]])