如果我们得到<<loop>>
,则意味着Haskell设法检测到无限循环。有没有办法让ghc告诉我们这个循环发生在哪里?似乎Haskell应该在某个地方提供这些信息。
答案 0 :(得分:24)
使用-prof
和-fprof-auto
编译您的应用(如果您使用的是Cabal,请使用--enable-executable-profiling
和--ghc-options=-fprof-auto
),然后使用{{1}运行它}。它会在发生错误时打印堆栈跟踪。这可以帮助您缩小范围。
示例:
+RTS -xc
答案 1 :(得分:1)
除了已编写的内容之外:仅在运行时检测到这些循环。检测基于试图评估已由[相同线程]评估的值的代码。显然,这绝不应该发生。
如果您正在寻找编译器开关来在编译时检测到这一点......那么您运气不好。它很容易静态地发现递归,但是判断递归是否是无限的并不是那么容易。