Jak osiągnąć debugowanie w leniwym, funkcjonalnym języku programowania?

Chciałbym wiedzieć, jak osiąga się debugowanie w leniwym, funkcjonalnym języku.
Czy możesz używać punktów przerwania, instrukcji drukowania i tradycyjnych technik? Czy to nawet dobry pomysł?
Rozumiem, że czyste programowanie funkcjonalne nie pozwala na efekty uboczne, z wyjątkiem monad.
Kolejność wykonania również nie jest gwarantowana.
Czy musiałbyś zaprogramować monadę dla każdej sekcji kodu, którą chcesz przetestować? Chciałbym uzyskać wgląd w to pytanie od kogoś bardziej doświadczonego w tej dziedzinie.

questionAnswers(5)

yourAnswerToTheQuestion