我第一次在我正在编写的 Haskell 程序中遇到无限循环。我已经将它缩小到一个非常具体的代码部分,但我似乎无法准确指出我在哪里有一个非终止递归定义。我对 GHCi 中的 :trace 和 :history 有点熟悉,但问题是我的代码的某些分支涉及 a 的相当多的递归修改,Data.Map.Map
因为地图x
是通过adjust
在地图中x'
基于值的某些东西获得的在另一张地图上取决于x'
. 细节在这里并不重要,但正如您可能知道的那样,如果这以一种交织在一起的递归方式发生,我的调用历史将完全陷入 map lookup
、adjust
ments 和insert
ions 所涉及的所有各种比较中。
谁能推荐一种更有效的方法来定位无限循环?例如,将调用历史限制为来自单个源文件的调用会很有帮助。