Haskell 在GHCi中调试无法解决的thunk
我的程序中有一个无限循环,在正常运行时会导致Haskell 在GHCi中调试无法解决的thunk,haskell,ghci,Haskell,Ghci,我的程序中有一个无限循环,在正常运行时会导致异常。使用GHCi,我追踪到了问题的根源 f = Constructor1 (Constructor2 A : (_t3::[DataType2])) 尝试用seq\u t3()对thunk进行排序会导致GHCi挂起,因此如果我理解正确,无限循环将发生在弱水头标准形式的还原中。有没有办法调查这个问题,例如一步一步地查看试图用来评估它的简化步骤?有没有办法缩小问题的范围,使其足够短,可以在这里发布?如果不能缩小范围(例如,通过使足够多的相关定
异常。使用GHCi,我追踪到了问题的根源
f = Constructor1
(Constructor2 A :
(_t3::[DataType2]))
尝试用
seq\u t3()
对thunk进行排序会导致GHCi挂起,因此如果我理解正确,无限循环将发生在弱水头标准形式的还原中。有没有办法调查这个问题,例如一步一步地查看试图用来评估它的简化步骤?有没有办法缩小问题的范围,使其足够短,可以在这里发布?如果不能缩小范围(例如,通过使足够多的相关定义变得无关紧要),为什么?我想不出缩小范围的方法;这正是我想问这个问题的目的。这是在一个非常大的程序中发生的,无限循环的惰性生成似乎不会发生在thunk计算点附近的任何地方。我想知道thunk在我的程序中来自哪里;例如,它是对具有某些已知参数的某个已知函数的调用历史记录没有透露,由于循环检测,使用分析运行程序会很快终止,因此没有明显的循环位置。能否在异常时启用堆栈跟踪,然后在无限循环期间启用Ctrl-C?