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