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

3 haskell

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

Chr*_*ith 9

(!)运营商不打算用于查找东西,可能不是在地图上.虽然你可以在IOmonad中捕获结果错误,但它的风格会非常糟糕.

相反,use lookup,返回Maybe a,特别是Nothing当元素不在map中时返回.

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

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

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

  3. 您可以使用该Debug.Trace模块将trace语句添加到代码中.