我有个问题.我写了一个很大的Haskell程序,它始终适用于小输入.现在,当我想测试它并生成更大的输入时,我总是收到消息:
HsProg: Prelude.head: empty list
Run Code Online (Sandbox Code Playgroud)
我用过Prelude.head很多次了.我该怎么做才能找到更多或获得更好的错误输出以获得它发生的代码行?
如何获得有关Haskell错误发生位置的更多信息?例如,昨天我正在研究一个Haskell程序,它解析输入文件,转换数据然后打印出报告信息.
有一次,我跑了"主"并回来了
*** Prelude.read: parse error
Run Code Online (Sandbox Code Playgroud)
没有其他信息.幸运的是,我知道我只是在一个地方打电话阅读并且能够修复它,但对于未来:
谢谢!
使用GHC 编辑.
我正在调试我在Haskell中为我的文凭论文实现的算法.它似乎对大多数输入正常工作,但我发现一个输入使GHC抛出错误
***例外:Map.find:元素不在地图中
由于我的代码中有很多Map查找,因此我需要找到抛出此错误的行来理解它.我通读了这个指南,但是虽然我设置了标志fbreak-on-exception(和-error),所有GHCi在跟踪我正在测试的函数后给了我:
[...]> :trace test
[...]
Stopped at <exception thrown>
_exception ::
e = GHC.Exception.SomeException (GHC.Exception.D:Exception _
(GHC.Show.D:Show ...) ....)
(GHC.Exception.ErrorCall ['M',....])
Unable to list source for <exception thrown>
Try rerunning with :trace, :back then :list
[<exception thrown>] [...]> :history
Empty history. Perhaps you forgot to use :trace?
Run Code Online (Sandbox Code Playgroud)
试图:trace再次似乎并没有帮助的.
那么,有人可以告诉我出了什么问题或提供另一种找到违规行的方法吗?提前致谢!
PS:我使用的是GHC 7.0.3版本,因此链接指南应该适用.