这确实是 Haskell 中最糟糕的部分之一——很难从中获取堆栈跟踪。
最直接的方法是编译程序进行分析,然后使用 RTS 选项调用它
myprog +RTS -xc -RTS
这将转储堆栈跟踪,尽管我听说它有点错误并且可能无法正常工作。这是文档中的示例
*** Exception raised (reporting due to +RTS -xc), stack trace:
GHC.List.CAF
--> evaluated by: Main.polynomial.table_search,
called from Main.polynomial.theta_index,
called from Main.polynomial,
called from Main.zonal_pressure,
called from Main.make_pressure.p,
called from Main.make_pressure,
called from Main.compute_initial_state.p,
called from Main.compute_initial_state,
called from Main.CAF
-xc
但是,当没有提供足够的额外信息时,我已经尽可能地寻找特定错误字符串的来源。
如果您在特定库中出现无法捕获的异常,并且您希望以更纯粹的方式处理它,您可能希望使用spoon
包中的函数将其转换为纯Maybe
结果。从那里你可以通过你自己的例外重新提出它。这也可能使错误更容易处理。