使用Data.Map时如何知道哪个元素不在Map中。

时间:2011-07-21 18:27:08

标签: haskell

我有一个Haskell程序,它在几个地方使用Data.Map.!。执行程序后,出现错误消息element not in the map。 我想知道如何知道使用Data.Map.!发出错误消息的程序的哪一行以及在地图中找不到哪个元素?

1 个答案:

答案 0 :(得分:9)

(!)运算符不用于查找可能不在地图中的内容。虽然你可以在IO monad中捕获结果错误,但这样会很糟糕。

相反,请使用返回lookup的{​​{1}},特别是当元素不在地图中时返回Maybe a

编辑:好的,我误解了你的问题。留下原始答案,以防它有用,但假设Nothing确实是你想要的并且你正在调试,你可以做几件事:

  1. 您可以暂时隐藏导入中的(!),而是定义您自己的使用(!)的版本并抛出更有用的错误(可能包含您尝试查找的密钥,如果它有一个Show实例)。

  2. 您可以在GHCi调试器中运行代码,并使用-fbreak-on-exception来停止查找发生的代码。

  3. 您可以使用lookup模块在​​代码中添加跟踪语句。