====== Debugging ======
===== Example with trace =====
module Main where
import Debug.Trace (trace)
main :: IO ()
main = do
putStrLn $ reverse' "1234abcd"
reverse' :: Show a => [a] -> [a]
reverse' l = rev l []
where
rev [] acc = acc
rev (e:r) acc = trace (show acc) (rev r (e : acc))
Output:
""
"1"
"21"
"321"
"4321"
"a4321"
"ba4321"
"cba4321"
dcba4321
===== Example with traceShow =====
module Main where
import Debug.Trace (traceShow)
main :: IO ()
main = do
putStrLn $ reverse' "1234abcd"
reverse' :: Show a => [a] -> [a]
reverse' l = rev l []
where
rev [] acc = acc
rev (e:r) acc = traceShow (e, r, acc) (rev r (e : acc))
Output:
('1',"234abcd","")
('2',"34abcd","1")
('3',"4abcd","21")
('4',"abcd","321")
('a',"bcd","4321")
('b',"cd","a4321")
('c',"d","ba4321")
('d',"","cba4321")
dcba4321
===== ✎ =====
~~DISCUSSION~~