import System.IO.Unsafe (unsafePerformIO) sudan n x y = unsafePerformIO $ do putStrLn ("sudan " ++ show n ++ " " ++ show x ++ " " ++ show y) return (realSudan n x y) realSudan n x y | n == 0 = x + y | y == 0 = x | otherwise = sudan (n - 1) sudan' (sudan' + y) where sudan' = sudan n x (y - 1) sudTup (n, x, y) = sudan n x y sudList [n, x, y] = sudTup (n, x, y) main = print (sudList [1, 5, 4])