digitSum n = f (div n 10) (mod n 10) where f 0 r = r f q r = r + digitSum q printf f x = putStrLn $ show x ++ " -> " ++ show (f x) main = mapM_ (printf digitSum) [123, 456, 789]