Como a depuração é alcançada em uma linguagem de programação funcional preguiçosa?

Eu gostaria de saber como a depuração é obtida em uma linguagem funcional preguiçosa.
Você pode usar pontos de interrupção, instruções de impressão e técnicas tradicionais? Isso é mesmo uma boa ideia?
Entendo que a programação funcional pura não permite efeitos colaterais, com exceção das mônadas.
A ordem de execução também não é garantida.
Você teria que programar uma mônada para cada seção do código que você quer testar? Eu gostaria de algumas dicas sobre essa questão de alguém mais experiente nessa área.

questionAnswers(5)

yourAnswerToTheQuestion