Haskell:
Drukowanie komunikatów debugowania

Jak to zrobić:

W Haskellu możemy używać funkcji print czy putStrLn do wypisywania danych na standardowe wyjście. Będzie wyglądało to tak:

main :: IO ()
main = do
  let liczba = 42
  putStrLn "Wyświetlam zawartość zmiennej liczba:"
  print liczba

Wyjście z tego programu:

Wyświetlam zawartość zmiennej liczba:
42

Możemy też użyć trace z modułu Debug.Trace do wypisywania informacji diagnostycznych bez zmiany typu naszej funkcji:

import Debug.Trace (trace)

main :: IO ()
main = print (myFunction 10)

myFunction :: Integer -> Integer
myFunction x = trace ("myFunction was called with " ++ show x) (x * 2)

Wyjście z debugowania będzie wyglądało tak:

myFunction was called with 10
20

Deep Dive

W Haskellu, debugowanie może być trudniejsze przez jego leniwe wyliczenia (lazy evaluation). print i putStrLn są dobre do prostej diagnostyki. Debug.Trace jest używane do bardziej zaawansowanego debugowania, ale uważaj: może zaburzać leniwe wyliczenia i prowadzić do nieoczekiwanego zachowania programu.

Historia: W innych językach, jak C czy Java, funkcje wypisujące do konsoli (np. printf czy System.out.println) od zawsze były standardem. W Haskellu pojawiły się one później, wraz z rozwojem IO Monady i modułu Debug.Trace.

Alternatywy: dla skomplikowanych aplikacji można użyć narzędzi do profilowania (jak ThreadScope czy ghc-prof) lub zintegrowane środowiska deweloperskie (IDE) z debuggerami.

See Also