¿Cómo se logra la depuración en un lenguaje de programación funcional perezoso?

Me gustaría saber cómo se logra la depuración en un lenguaje funcional perezoso.
¿Se pueden utilizar puntos de interrupción, declaraciones impresas y técnicas tradicionales? ¿Es esto incluso una buena idea?
Tengo entendido que la programación funcional pura no permite efectos secundarios, con la excepción de las mónadas.
La orden de ejecución tampoco está garantizada.
¿Tendría que programar una mónada para cada sección del código que desea probar? Me gustaría tener una idea de esta pregunta de alguien con más experiencia en esta área.

Respuestas a la pregunta(5)

Su respuesta a la pregunta