sudan n x y | n == 0 = trace (x + y) | y == 0 = trace x | otherwise = do trace 0 sudan' <- sudan n x (y - 1) sudan (n - 1) sudan' (sudan' + y) where trace r = do putStrLn("sudan " ++ show n ++ " " ++ show x ++ " " ++ show y) return r sudTup (n, x, y) = do { p <- sudan n x y; return p } sudList [n, x, y] = do { q <- sudTup (n, x, y); return q } main = do r <- sudList [1, 5, 4] print r