Ответ 1
Одна вещь, которую я делал в прошлом, - это использовать unsafePerformIO для прерывания всякий раз, когда я нажимаю клавишу:
Скажем, т - ваше исходное выражение, вставьте x в выражение:
import System.IO
import System.IO.Unsafe
t i = do print i; t (i+1)
t2 i = do print i; x; t2 (i+1)
x = do r <- hReady stdin
if r then do a<-hGetChar stdin
print a -- break on this line
else print ""
Затем в приглашении ghci:
*Main> :break 9
*Main> t2 0
Нажмите клавишу клавиатуры
*Main> :cont
возобновляется, когда вы остановились.