Como escrever uma mônada que imprime “passo i de N” ao executar cada afirmação na mônada?
Eu nem tenho certeza se isso é possível em qualquer tipo de mônada; isso viola leis de mônadas? Mas parece algo que deveria ser possível em algum tipo de construto ou outro. Especificamente existe alguma maneira de ter algo que eu possa escrever algo como
do
someOp ()
someOtherOp ()
thirdOp ()
e imprimiria
step 1 of 3
step 2 of 3
step 3 of 3
Isso exigiria o Template Haskell ou uma mônada funcionaria? (E se for necessário o Template Haskell, como fazê-lo dessa maneira?)