我有一个Haskell程序,它在几个地方使用Data.Map.!
。执行程序后,出现错误消息element not in the map
。
我想知道如何知道使用Data.Map.!
发出错误消息的程序的哪一行以及在地图中找不到哪个元素?
答案 0 :(得分:9)
(!)
运算符不用于查找可能不在地图中的内容。虽然你可以在IO
monad中捕获结果错误,但这样会很糟糕。
相反,请使用返回lookup
的{{1}},特别是当元素不在地图中时返回Maybe a
。
编辑:好的,我误解了你的问题。留下原始答案,以防它有用,但假设Nothing
确实是你想要的并且你正在调试,你可以做几件事:
您可以暂时隐藏导入中的(!)
,而是定义您自己的使用(!)
的版本并抛出更有用的错误(可能包含您尝试查找的密钥,如果它有一个Show实例)。
您可以在GHCi调试器中运行代码,并使用-fbreak-on-exception来停止查找发生的代码。
您可以使用lookup
模块在代码中添加跟踪语句。