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 liczbaWyjście z tego programu:
Wyświetlam zawartość zmiennej liczba:
42Moż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
20Deep 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
- Haskell Documentation for
Debug.Trace: https://hackage.haskell.org/package/base-4.16.1.0/docs/Debug-Trace.html - ThreadScope, narzędzie do profilowania wielowątkowych aplikacji Haskell: https://wiki.haskell.org/ThreadScope
- GHC User’s Guide, sekcja o profilowaniu: https://downloads.haskell.org/ghc/latest/docs/html/users_guide/profiling.html